[SQL] eerst order dan group

Pagina: 1
Acties:

  • reddevil001
  • Registratie: Januari 2002
  • Laatst online: 16:31
Ik wil uit een tabel van ieder nummer alleen degene met de hoogste datum eruit halen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> select * from test;
+--------+----------+
| nummer | datum    |
+--------+----------+
|      1 | 20020101 |
|      1 | 20020102 |
|      1 | 20020103 |
|      2 | 20020101 |
|      2 | 20020102 |
+--------+----------+

mysql> select nummer, datum from test group by nummer order by datum desc;
+--------+----------+
| nummer | datum    |
+--------+----------+
|      1 | 20020101 |
|      2 | 20020101 |
+--------+----------+


Het lukt zonder probleem om de laagste uit de tabel te halen, maar ik wil er iets uit halen wat lijkt op het volgende:

code:
1
2
3
4
5
6
+--------+----------+
| nummer | datum    |
+--------+----------+
|      1 | 20020103 |
|      2 | 20020102 |
+--------+----------+


Eigenlijk zou ik eerst willen sorteren op datum (order datum desc) om daarna group toe te passen, maar dat kan in principe niet.
Iemand een idee hoe dat wel kan?

None


  • MichelVH
  • Registratie: Oktober 2001
  • Laatst online: 01-08 09:33
Wat je wilt is dus de hoogste datum per nummer?
code:
1
select nummer, MAX(datum) from test group by nummer order by datum desc;

Don't be afraid of the dark, be afraid of what it hides


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:24
Neen, dat kan niet. ORDER BY is altijd de laatste clausule.

Ik snap ook jouw eerste query niet goed... Je gebruikt een group by, maar die is helemaal niet nodig in dat geval, je maakt nl. geen gebruik van aggregated functions. Je zult dus, zoals TheDark zegt, gebruik moeten maken van de aggregated function MAX.

Ik denk dat je hier ook nog wel wat aan hebt:
SQL Tutorial

https://fgheysels.github.io/


  • reddevil001
  • Registratie: Januari 2002
  • Laatst online: 16:31
Ik had nog in de mysql manual naar max zitten kijken. Ik kreeg echter de indruk dat je dan eerst de hoogste datum uit de tabel zou halen en daarna er pas de group op zou toepassen. Dan zou er alleen het record met nummer 1 en datum 20020103 uit zou komen.

Maar goed MAX() bleek inderdaad de oplossing te zijn.

None


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:24
[nohtml]
reddevil001 schreef op 29 december 2002 @ 13:40:
Ik had nog in de mysql manual naar max zitten kijken. Ik kreeg echter de indruk dat je dan eerst de hoogste datum uit de tabel zou halen en daarna er pas de group op zou toepassen. Dan zou er alleen het record met nummer 1 en datum 20020103 uit zou komen.
Als je geen group by gebruikt, dan is dat idd het geval. Als je group by gebruikt, geef je aan dat je de hoogste waarde wilt hebben binnen die groep.

https://fgheysels.github.io/


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ik denk dat je hier wel iets aan hebt: [rml][ SQL] Leuk query vraagstuk[/rml]/
Pagina: 1