sortierung bei GROUP BY
boris
- datenbank
0 Tom
hallo zusammen!
Ich habe eine tabelle, die als forum fungieren soll.
ich will eine liste der themen und jeweils die epochensekunde des letzten eintrag.
mit:
SELECT thema, MAX(Epochensekunde)
FROM tabelle
GROUP BY thema
komme ich dem, was ich will schon sehr nahe. leider sortiert er dabei nach thema und dabei will ich doch eine sortierung nach Epochensekunde.
Meine versuche mit thema und DISTINCT habe ich gelassen, weil thema und Epochensekunde schon eine gruppe bilden sollten ausserdem habe ich ja in jeder zeile eine andere Epochensekunde
Was ich bräuchte ist sowas wie:
GROUP BY MAX(Epochensekunde)
oder zumindest
GROUP BY thema
ORDER BY MAX(Epochensekunde)
das geht aber leider nicht (auch wenn ich Max() mit AS benenne)
was mache ich falsch?
Hello,
SELECT thema, MAX(Epochensekunde)
FROM tabelle
GROUP BY thema
ORDER BY Epochensekunde
So müsste das gehen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Moin!
Hello,
SELECT thema, MAX(Epochensekunde)
FROM tabelle
GROUP BY thema
ORDER BY EpochensekundeSo müsste das gehen.
Nein. Die Sortierspalte heißt nicht "Epochensekunde", sondern "MAX(Epochensekunde)", wobei dieser Name gerne mit der Aggregatsfunktion kollidiert.
Deshalb: Alias-Name für die MAX-Spalte vergeben und den verwenden.
SELECT thema, MAX(Epochensekunde) as zeit FROM tabelle GROUP BY thema ORDER BY zeit
- Sven Rautenberg
Hello Sven,
Nein. Die Sortierspalte heißt nicht "Epochensekunde", sondern "MAX(Epochensekunde)", wobei dieser Name gerne mit der Aggregatsfunktion kollidiert.
Deshalb: Alias-Name für die MAX-Spalte vergeben und den verwenden.
SELECT thema, MAX(Epochensekunde) as zeit FROM tabelle GROUP BY thema ORDER BY zeit
Ja, das ist nachvollziehbar und hätte ich auch so gemacht, wenn Boris nicht geschrieben hääte, dass da bei ihm nicht klappt.
Meinen Vorschlag hatte ich mit meiner Testdatenbank ausprobiert und er hat funktioniert. Nun frage ich mich aber, warum
SELECT ID_TEST, VARC, count(VARC) as MENGE, MAX(UPDATETIME1) as ZEIT
FROM TEST
GROUP BY VARC
ORDER BY ZEIT;
So wäre es dann also richtig und so funktioniert es auch.
Nun habe ich gerade eben noch was merkwürdiges festgestellt. Die Spalte VARC ist ein VarChar (was auch sonst) und es gibt auch Zeilen, in denen VARC == NULL ist. Die werden nicht mitgezählt. Es wird zwar in die Gruppierung genau eine Zeile mit NULL aufgenommen, aber MENGE bleibt 0.
Muss das so sein oder habe ich da wieder einen Denkfehler drin (oder ist es vielleicht sogar ein Bug)?
Liebe Grüße aus http://www.braunschweig.de
Tom
SELECT thema, max(epochensekunde) as epochensekunde
FROM tabelle
GROUP BY thema
ORDER BY epochensekunde desc
ES LÄUFT!!! Vielen, vielen dank für die hilfe!!! so leicht ist das manchmal!!!
ich hatte letztens den fehler gemacht und DESC in die GROUP BY zeile gesetzt und dabei nicht erkannt dass alles ja schon eigentlich richtig war. DESC macht ja, wenn ich jetzt so überlege ja auch nur bei ORDER BY sinn.
1000dank euch beiden, hab es schon ins abfragescript eingebaut, läuft supergut :)))
ich hatte schon befürchtet, ich müsse die daten mit dem client-perlscript sortieren (schaurige vorstellung). Mich freut aber total, dass ich als anfänger in SQL, schon auf dem richtigen weg war und eigentlich das prinziep der abfrage verstanden hab (ich werde immer so unsicher, ob mein ansatz überhaupt der richtige ist)
ich wünsche euch auch einen sortierten tag,
Boris