mysql groupiren bei höchstem Datum

wachteldonk

Erfahrenes Mitglied
Hallo,

wenn ich nach einem Feld gruppiere

z.B

GROUP BY
nachname

und es gibt mehrere Einträge mit dem Nachnamen. Warum erhalte ich dann , wenn ich ORDER eingebe nicht den höchten Wert?

ORDER BY
datum


Ich möchte alle Daten des Wertes haben der das höchste datum hat
 
Für Wen Geht Susi Heute Ohne Slip?
FROM, WHERE, GROUP BY, SELECT (1), HAVING, ORDER BY, SELECT (2)

Das ist die Auswertungsreihenfolge eines SQL-Befehls. Nach einem GROUP BY nachname, ist somit die Angabe datum gar nicht mehr vorhanden nach der sortiert werden soll.
GROUP BY aggregiert Zeilen, d.h. sie macht aus vielen Zeilen eine einzige. Nach einem Group By sind nur noch die Spalten vorhanden die in der Group Klausel auftreten, auf alle anderen können Aggregatfunktionen angewendet werden (SUM, COUNT, usw). Das bedeutet das auch nur nach diesen Angaben sortiert bzw diese Angaben selektiert werden können.
Leider habe ich nicht ganz verstanden was du tun möchtest, aber da gibts mit Sicherheit andere Wege.
 
Zuletzt bearbeitet:
Um es kurz zu uebersetzen was Cojote sagte: ;)
SQL gruppiert erst und sortiert dann. Sprich es nimmt das erste Datum, das es zu einem Nachnamen findet, und dieses wird dann (quasi) zum Datum der Gruppe.

Der Code von Homer ist gleichzusetzen mit Maximumssuche, sprich da steht komplizierter :
SELECT *, MAX(datum) FROM tabelle1
Nur des es kein zusaetzliches Feld MAX(datum) gibt.

Ich glaube das ist nicht das, was du willst.

Mir fallen spontan zwei Wegen ein.
Simpel und sauber:
SELECT *, MAX(datum) AS max_datum FROM deine_tabelle GROUP BY Nachname

Etwas komplizierter, dafuer hast du kein zusätzliches Feld max_datum und kannst trotzdem * verwenden:
SELECT * FROM (SELECT * FROM deine_tabelle AS tbl1 ORDER BY datum DESC) AS tbl2 GROUP BY Nachname

Hier wird zuerst mit "SELECT * FROM deine_tabelle AS tbl1 ORDER BY datum DESC" die Tabelle nach Datum sortiert und die sortierte Tabelle danach gruppiert.

Viel Spass damit ;)
 
Zurück