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

Ich möchte mir eine kleine Statistik augeben lassen.

Dazu frage ich einfach meine Tabelle ab:

SELECT id, datum FROM table ORDER by datum DESC

So bekomme ich alle Einträge sortiert nach Datum.

ID Datum
62 2014-04-17 17:55:10
62 2014-04-17 17:55:07
88 2014-04-17 17:55:02
59 2014-04-17 17:54:57
67 2014-04-17 17:54:54
62 2014-04-17 17:54:52
72 2014-04-17 17:54:49
10 2014-04-17 17:52:52
10 2014-04-17 17:49:39

Jetzt würde ich aber gerne eine ZUsammenfassung meiner Einträge ausgeben lassen, also nur immer eine ID, wenn mehrere Einträge in der Tabelle sind immer den neuesten. So groupiere ich alle IDs und lasse sie mir ausgeben:

SELECT id, datum FROM table GROUP BY id ORDER by datum DESC

ID Datum
88 2014-04-17 17:55:02
59 2014-04-17 17:54:57
67 2014-04-17 17:54:54
62 2014-04-17 17:54:52
72 2014-04-17 17:54:49
10 2014-04-17 17:49:39

Aber die Ausgabe, bzw. die sortierung stimmt nicht es werden alte, Einträge angezeigt, nicht die neusten. Wie kann ich aber die sortierung richtig hin bekommen?

Es müsste eigentlich

10 2014-04-17 17:52:52

angezeigt werden, es kommt aber

10 2014-04-17 17:49:39

Malli

  1. 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