Rouven: MYSQL, die Sortierung, nach group ist nicht mehr korrekt

Beitrag lesen

Hello,

62 2014-04-17 17:55:10
62 2014-04-17 17:55:07
SELECT id, datum FROM table GROUP BY id ORDER by datum DESC

Es müsste eigentlich [..] angezeigt werden, es kommt aber

nach welcher Logik bist du der Meinung, dass das andere Ergebnis rauskommen sollte? Von der Abarbeitungsreihenfolge kommt dein "ORDER BY" erst NACH der Gruppierung zum Zuge, sprich auf dem Endergebnis, nicht auf den Rohdaten.
Ich bin ja erstaunt, dass nach 3 Jahren, in denen ich mich kaum mit Datenbanken beschäftigt habe, dieses verlockende Verhalten immer noch in MySQL enthalten ist.
Viele Datenbanksysteme würden dein Query mit einem Syntaxfehler ablehnen. Die Regel für "sauberes" SQL lautet:
Bei Verwendung von GROUP BY muss das Statement sicher stellen, dass eindeutig feststeht, wie die Spalten des Ergebnisses aussieht. Dies geschieht darüber, dass jede Spalte entweder in der GROUP BY Klausel angegeben ist, oder ihr Wert sich aus einer Aggregatfunktion (MAX, MIN, SUM, ..) berechnet. In deinem Fall ist das nicht so, weil zwei Datumswerte zur Auswahl stehen. Wenn du den neusten suchst, dann also den maximalen:
SELECT id, MAX(datum) AS max_date FROM table GROUP BY id ORDER BY max_date DESC

MfG
Rouven

--
-------------------
sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
Advice is a form of nostalgia. Dispensing it is a way of fishing the past from the disposal, wiping it off, painting over the ugly parts and recycling it for more than it's worth.  --  Mary Schmich (Chicago Tribune; 1997); Baz Luhrmann (1999), see http://en.wikipedia.org/wiki/Wear_Sunscreen