In relationalen Datenbanken müssen Sie manchmal die Zeile mit dem Maximalwert einer bestimmten Spalte für jede Gruppe abrufen. Dies wird als Auswahl des gruppenweisen Maximums bezeichnet. In MySQL gibt es mehrere Ansätze, um dies zu erreichen.
Eine effiziente Methode ist die Verwendung einer Unterabfrage:
SELECT * FROM ( SELECT id, MAX(version_id) AS version_id FROM table GROUP BY id ) AS t1 INNER JOIN table AS t2 ON t2.id = t1.id AND t1.version_id = t2.version_id;
Diese Unterabfrage erstellt eine Tabelle der Ermittelt die maximalen Versions-IDs für jede ID und verknüpft sie dann mit der Originaltabelle, um die entsprechenden Zeilen abzurufen. Es ist relativ effizient und setzt das Vorhandensein eines Index für die Spalten (id, version_id) voraus.
Alternativ können Sie Aggregations- und Ranking-Funktionen verwenden:
SELECT id, version_id, field1, field2 FROM ( SELECT id, version_id, field1, field2, RANK() OVER (PARTITION BY id ORDER BY version_id DESC) AS ranking FROM table ) AS ranked_table WHERE ranking = 1;
Diese Abfrage ordnet die Zeilen für jede ID in absteigender Reihenfolge der Versions-ID und wählt diejenigen mit der Rangfolge 1 aus, wodurch effektiv nach dem Maximum gefiltert wird Version.
Zu diesem Zweck können auch Fensterfunktionen verwendet werden:
SELECT id, version_id, field1, field2 FROM ( SELECT id, version_id, field1, field2, MAX(version_id) OVER (PARTITION BY id) AS max_version_id FROM table ) AS windowed_table WHERE version_id = max_version_id;
Diese Abfrage berechnet die maximale Versions-ID für jede ID mithilfe von MAX() over()-Fensterfunktion und wählt die Zeilen mit übereinstimmenden Versions-IDs aus.
Das obige ist der detaillierte Inhalt vonWie wähle ich das gruppenweise Maximum in MySQL aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!