Die „letzte“ Zeile jeder „Gruppierung nach“ in MySQL zurückgeben
Das effiziente Abrufen der letzten Zeile jeder gruppierten Menge in MySQL ist eine gemeinsame Aufgabe. Ein früherer Ansatz schlug eine Abfrage unter Verwendung einer Unterabfrage innerhalb der WHERE-Klausel vor:
select * from foo as a where a.id = (select max(id) from foo where uid = a.uid group by uid) group by uid;
Eine alternative Lösung bietet jedoch möglicherweise eine verbesserte Leistung:
SELECT t1.* FROM foo t1 JOIN (SELECT uid, MAX(id) id FROM foo GROUP BY uid) t2 ON t1.id = t2.id AND t1.uid = t2.uid;
Diese Abfrage verwendet explizit eine JOIN-Operation Verknüpfen Sie die Originaltabelle („foo“) mit einer abgeleiteten Tabelle, die den maximalen ID-Wert für jede eindeutige Benutzer-ID enthält. Die ON-Klausel stellt sicher, dass nur die Zeilen mit übereinstimmenden IDs und Benutzer-IDs verknüpft werden.
Um die Abfrage weiter zu optimieren, wird empfohlen, einen Index für die Spalte „uid“ zu erstellen, da diese zum Gruppieren und Verknüpfen verwendet wird . Die Verwendung von EXPLAIN kann Einblicke in den Ausführungsplan der Abfrage liefern und potenzielle Leistungsengpässe identifizieren.
Ein anderer Ansatz, der den LEFT JOIN-Operator verwendet, kann ebenfalls das gewünschte Ergebnis erzielen:
SELECT t1.* FROM foo t1 LEFT JOIN foo t2 ON t1.id < t2.id AND t1.uid = t2.uid WHERE t2.id is NULL;
In dieser Abfrage , führt der LEFT JOIN einen äußeren Join durch, der Zeilen aus „foo“ basierend auf den Kriterien „uid“ und „id“ abgleicht. Die WHERE-Klausel stellt sicher, dass nur die Zeilen ohne nachfolgende Zeile in derselben Gruppe ausgewählt werden, wodurch effektiv die letzte Zeile für jede Benutzer-ID zurückgegeben wird.
Durch die Berücksichtigung alternativer Ansätze und die Optimierung der Abfrage durch Indizierung und EXPLAIN-Analyse ist dies der Fall möglich, einen effizienten Abruf der letzten Zeile für jede „Gruppe nach“ in MySQL zu erreichen.
Das obige ist der detaillierte Inhalt vonWie kann ich die letzte Zeile jeder Gruppe in MySQL effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!