Heim > Datenbank > MySQL-Tutorial > Wie rufe ich die neuesten Informationen mit SQLs „GROUP BY' und „MAX' (oder Alternativen) ab?

Wie rufe ich die neuesten Informationen mit SQLs „GROUP BY' und „MAX' (oder Alternativen) ab?

Barbara Streisand
Freigeben: 2024-12-26 02:38:11
Original
341 Leute haben es durchsucht

How to Retrieve the Latest Information Using SQL's `GROUP BY` and `MAX` (or Alternatives)?

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage