In SQL ermöglicht uns die GROUP BY-Klausel, Zeilen basierend auf angegebenen Spalten zu gruppieren. Bei Verwendung mit der MAX-Funktion kann damit der größte Wert aus jeder Gruppe ausgewählt werden.
Angenommen, Sie haben eine Tabelle mit den folgenden Daten:
ID | Name | AlarmID | AlarmUnit | AlarmLevel |
---|---|---|---|---|
1 | Test | Voltage | PSU | Warning |
2 | Test | Voltage | PSU | Ceased |
3 | Test | Voltage | PSU | Warning |
4 | Test | Temperature | RCC | Warning |
5 | Test | Temperature | RCC | Ceased |
Sie möchten nur die neuesten Informationen für jede durch AlarmID und AlarmUnit definierte Gruppe abrufen. Die erwartete Ausgabe sollte sein:
ID | Name | AlarmID | AlarmUnit | AlarmLevel |
---|---|---|---|---|
3 | Test | Voltage | PSU | Warning |
5 | Test | Temperature | RCC | Ceased |
Um dieses Problem zu lösen, können wir die folgende Abfrage in Oracle, SQL Server 2005 und PostgreSQL 8.4 verwenden:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY alarmId, alarmUnit ORDER BY id DESC) AS rn FROM TableName ) q WHERE rn = 1
Für MySQL lautet die Abfrage:
SELECT mi.* FROM ( SELECT alarmId, alarmUnit, MAX(id) AS mid FROM TableName GROUP BY alarmId, alarmUnit ) mo JOIN TableName mi ON mi.id = mo.mid
Für PostgreSQL 8.3 und Unten können wir Folgendes verwenden:
SELECT DISTINCT ON (alarmId, alarmUnit) * FROM TableName ORDER BY alarmId, alarmUnit, id DESC
Das obige ist der detaillierte Inhalt vonWie wähle ich den Maximalwert innerhalb jeder Gruppe in SQL aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!