Es gibt eine Tabelle messages
die Daten wie unten dargestellt enthält:
Id Name Other_Columns
-------------------------
1 A A_data_1
2 A A_data_2
3 A A_data_3
4 B B_data_1
5 B B_data_2
6 C C_data_1
Wenn ich eine Abfrage ausführe select * from messages group by name
erhalte ich das folgende Ergebnis:
1 A A_data_1
4 B B_data_1
6 C C_data_1
Welche Abfrage liefert das folgende Ergebnis?
3 A A_data_3
5 B B_data_2
6 C C_data_1
Das heißt, der letzte Datensatz in jeder Gruppe sollte zurückgegeben werden.
Zurzeit verwende ich diese Abfrage:
SELECT
*
FROM (SELECT
*
FROM messages
ORDER BY id DESC) AS x
GROUP BY name
Dies erscheint jedoch äußerst ineffizient. Gibt es andere Möglichkeiten, um das gleiche Ergebnis zu erzielen?
4 Stimmen
Siehe akzeptierte Antwort in stackoverflow.com/questions/1379565/ für eine effizientere Lösung
2 Stimmen
Duplikat von stackoverflow.com/q/121387/684229
12 Stimmen
Warum können Sie nicht einfach DESC hinzufügen, d. h. select * from messages group by name DESC
0 Stimmen
Mögliches Duplikat von Wie kann ich SELECT Zeilen mit MAX(Spaltenwert), DISTINCT durch eine andere Spalte in SQL?
5 Stimmen
@KimPrince Es scheint, dass die von Ihnen vorgeschlagene Antwort nicht das tut, was erwartet wird! Ich habe gerade Ihre Methode ausprobiert, und sie hat die ERSTE Zeile für jede Gruppe genommen und DESC geordnet. Es wird NICHT die letzte Zeile jeder Gruppe genommen.
0 Stimmen
Für mehr Effizienz, siehe mysql.rjweb.org/doc.php/groupwise_max
0 Stimmen
Siehe dies: paulund.de/get-last-record-in-each-mysql-group
0 Stimmen
@DatsunBing Ihre Lösung ist die einfachste und perfekteste.
0 Stimmen
Ich habe eine interessante Lösung für dieses Problem gefunden: stackoverflow.com/a/68894680/13457138
0 Stimmen
"letzter Datensatz" ist nicht zuverlässig, wenn Sie nicht ausdrücklich einen
ORDER BY
.0 Stimmen
@DatsunBing - Die innere
ORDER BY
wird vom Optimierer ignoriert. Die äußereGROUP BY
verstößt gegenONLY_FULL_GROUP_BY
.0 Stimmen
Kann mir bitte jemand sagen, warum nicht alle Datenbanken das einzige (meiner Meinung nach) vernünftige Ergebnis verwenden, wenn sie eine Aggregatfunktion verwenden, nämlich die anderen Felder auszuwählen aus derselben Reihe ? Dies nicht zu tun, macht nicht nur für mich keinen Sinn, sondern macht auch all diese anderen Methoden notwendig, die viel komplizierter .