In meiner SQL-Abfrage wähle ich Daten mit GROUP BY und ORDER BY -Klauseln aus. Die Tabelle enthält dieselbe numbers
in mehreren Zeilen mit unterschiedlichen Zeiten in jeder Zeile. Ich denke also, ich möchte eine GROUP BY - Klausel anwenden.
Allerdings in den Ergebnissen die älteste Zeit mit der Nummer zurück, aber ich brauche die aktuellste Zeit.
SELECT * FROM TABLE GROUP BY (numbers) ORDER BY time DESC
Die Abfrage sieht so aus, als ob sie zuerst GROUP BY und dann ORDER BY ... anwenden sollte, aber die Ergebnisse scheinen nicht so zu funktionieren.
Gibt es eine Möglichkeit, dies zu beheben?
abhilfe besteht darin, die Abfrage neu zu schreiben als:
SELECT * FROM (SELECT * FROM table ORDER BY time DESC) AS t GROUP BY numbers;
SELECT *
FROM table t
WHERE time = (
SELECT max(time)
FROM table
WHERE t.numbers = numbers
)
SELECT * FROM table
WHERE time IN (
SELECT MAX(time)
FROM table
GROUP BY numbers
)
Entsprechend dem Handbuch können Sie desc der Gruppe nach Liste hinzufügen: Beispiel:
Gruppieren nach Item1, Item2 Desc, Item3
mit oder ohne Rollup.
Ich habe dies versucht und es funktioniert in Ubuntu Version 5.5.58. Die Referenzseite lautet: https://dev.mysql.com/doc/refman/5.7/en/group-by-modifiers.html