Felix Riesterer: GROUP BY - höchsten Wert in anderer Spalte nicht verlieren

Beitrag lesen

Liebe Datenbankerfahrene,

ich habe (stark vereinfacht) folgende Situation:

|id|update|login| |---| |1|1|Alex |2|1|Bob |3|1|Chris |4|1|Sue |5|2|Alex |6|2|Chris |7|2|Sue

Es wird immer wieder einmal ein Update mit einer laufenden Nummer an User ausgegeben und in obiger Tabelle festgehalten, wenn ein User ein bestimmtes Update erhalten hat. Man beachte, dass Bob das Update 2 nicht erhalten hat, daher fehlt zwischen ID(5) und ID(6) ein passender Eintrag. Statt der Klartextnamen hier ist login selbstverständlich ein anderer String-Wert - eben der Benutzername.

Ja, den ID-Wert könnte man sich sparen, wenn man den Primärschlüssel über die beiden Spalten update und user definieren würde. In meinem Fall aber benötige ich die ID an anderer Stelle wieder, daher habe ich einen Primärschlüssel mit AUTO_INCREMENT-Wert.

Nun zu meinem Problem.

Ich möchte ausgeben, wer zuletzt welches Update erhalten hat. Dazu erwarte ich für dieses Beispiel folgendes Ergebnis:

|id|update|login| |---| |2|1|Bob |5|2|Alex |6|2|Chris |7|2|Sue

Mit welcher Abfrage kann ich das erreichen? Mein bisheriges Verständnis von SQL, insbesondere mit GROUP BY, setzt hier leider mit "ist unmöglich" aus. So sieht mein bisheriger Ansatz aus, der jeweils die ersten Einträge aus der Tabelle selektiert und damit immer das älteste anstatt des neuesten Updates listet:

SELECT `id`, `update`, `login`
FROM `user_updated_log`
WHERE 1
GROUP BY `login`
ORDER BY `update`

Offensichtlich wird die Information zu update beim Grouping verworfen, sodass die anschließende Sortierung nach update keinen Sinn mehr hat. Wie kann ich das verhindern und vor dem Grouping eine Sortierung erreichen, die den jeweils höchsten update-Wert zuerst listet?

Liebe Grüße,

Felix Riesterer.

akzeptierte Antworten