Abrufen der neuesten Informationen mit SQL Group By & Max
In einigen Szenarien ist es notwendig, die neuesten oder maximalen gruppierten Werte abzurufen nach bestimmten Spalten in einem Datensatz. Eine solche häufige Aggregation besteht darin, die neuesten Informationen für eindeutige Wertekombinationen zu finden.
Betrachten Sie die folgende Tabelle mit einer Liste von Alarmen:
id | name | alarmId | alarmUnit | alarmLevel |
---|---|---|---|---|
1 | test | voltage | psu | warning |
2 | test | voltage | psu | ceasing |
3 | test | voltage | psu | warning |
4 | test | temp | rcc | warning |
5 | test | temp | rcc | ceasing |
Das Ziel besteht darin, nur die neuesten Informationen abzurufen Informationen für jede Kombination aus alarmId und alarmUnit. Das erwartete Ergebnis sollte wie folgt aussehen:
id | name | alarmId | alarmUnit | alarmLevel |
---|---|---|---|---|
3 | test | voltage | psu | warning |
5 | test | temp | rcc | ceasing |
Um dieses Ergebnis zu erzielen, können mehrere Ansätze genutzt werden. Eine gängige Methode ist die Verwendung der Funktion ROW_NUMBER(), die jeder Zeile innerhalb jeder Gruppe einen Rang zuweist. Die folgende Abfrage nutzt diese Funktion:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY alarmId, alarmUnit ORDER BY id DESC) AS rn FROM mytable ) q WHERE rn = 1
Diese Abfrage gibt die aktuellste Zeile für jede Kombination aus alarmId und alarmUnit zurück.
Für Datenbanken, die die Funktion ROW_NUMBER() nicht unterstützen B. MySQL, kann ein anderer Ansatz verwendet werden:
SELECT mi.* FROM ( SELECT alarmId, alarmUnit, MAX(id) AS mid FROM mytable GROUP BY alarmId, alarmUnit ) mo JOIN mytable mi ON mi.id = mo.mid
Diese Abfrage verwendet eine Unterabfrage, um die maximale ID für jede Kombination von zu ermitteln alarmId und alarmUnit und verknüpft dann das Ergebnis mit der Originaltabelle, um die entsprechenden Zeilen abzurufen.
In PostgreSQL-Versionen 8.3 und niedriger kann die DISTINCT ON-Klausel verwendet werden:
SELECT DISTINCT ON (alarmId, alarmUnit) * FROM mytable ORDER BY alarmId, alarmUnit, id DESC
Dies Die Abfrage gibt die erste eindeutige Zeile für jede Kombination aus alarmId und alarmUnit zurück, die effektiv die neuesten Informationen bereitstellt. Durch die Nutzung dieser Techniken können Entwickler effizient die neuesten Werte aus ihren Daten abrufen und so fundierte Entscheidungen auf der Grundlage der neuesten verfügbaren Informationen treffen.
Das obige ist der detaillierte Inhalt vonWie rufe ich die neuesten Informationen mit SQLs „GROUP BY' und „MAX' (oder Alternativen) ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!