Heim > Datenbank > MySQL-Tutorial > Wie wählt man effizient die aktuellsten Werte für jeden Schlüssel in einer Datenbanktabelle aus?

Wie wählt man effizient die aktuellsten Werte für jeden Schlüssel in einer Datenbanktabelle aus?

DDD
Freigeben: 2024-12-31 20:25:19
Original
1014 Leute haben es durchsucht

How to Efficiently Select the Most Recent Values for Each Key in a Database Table?

Auswählen der aktuellsten Werte für jeden Schlüssel in einer Datenbanktabelle

Bei der Arbeit mit Tabellen, die Sensordaten oder andere zeitgestempelte Informationen enthalten, ist dies der Fall Oftmals ist es erforderlich, die aktuellsten Einträge für jeden einzelnen Schlüsselwert abzurufen. Während ein einfacher Ansatz mit Gruppierung nach Schlüssel und Sortierung nach maximalem Zeitstempel intuitiv erscheinen mag, kann er aufgrund der Einbeziehung von Nicht-Schlüsselfeldern in die Aggregation zu Fehlern führen.

Alternative Lösung mithilfe einer Unterabfrage :

Eine zuverlässige Methode behebt dieses Problem, indem eine Unterabfrage verwendet wird, um den maximalen Zeitstempel für jeden Schlüssel zu ermitteln Wert:

SELECT sensorID,
       timestamp,
       sensorField1,
       sensorField2
FROM sensorTable
WHERE timestamp = (SELECT MAX(timestamp) FROM sensorTable WHERE sensorID = sensorTable.sensorID)
ORDER BY sensorID, timestamp;
Nach dem Login kopieren

In dieser Abfrage:

  • Auf die primäre Tabelle sensorTable wird zweimal zugegriffen.
  • Die innere Unterabfrage ruft den maximalen Zeitstempel ab (MAX(Zeitstempel) ) für jede Sensor-ID und vergleicht sie mit dem entsprechenden Zeitstempel aus der Primärtabelle.
  • Zeilen mit der aktuellsten Für jeden Schlüsselwert werden Zeitstempel ausgewählt.
  • Die abgerufenen Spalten umfassen die Sensor-ID, den Zeitstempel, sensorField1 und sensorField2.

Zusätzliche Lösung mit JOIN:

Eine alternative Lösung verwendet einen JOIN Operation:

SELECT
    s1.sensorID,
    s1.timestamp,
    s1.sensorField1,
    s1.sensorField2
FROM sensorTable AS s1
JOIN (
    SELECT sensorID, MAX(timestamp) AS max_timestamp
    FROM sensorTable
    GROUP BY sensorID
) AS s2
    ON s1.sensorID = s2.sensorID AND s1.timestamp = s2.max_timestamp;
Nach dem Login kopieren
  • Diese Abfrage erstellt eine temporäre Tabelle (s2), die die maximalen Zeitstempel für jede Sensor-ID enthält.
  • s1 (Haupttabelle) wird mit s2 auf der Sensor-ID verknüpft und Zeitstempelspalten, um die neuesten Zeilen für jeden Schlüsselwert auszuwählen.

Das obige ist der detaillierte Inhalt vonWie wählt man effizient die aktuellsten Werte für jeden Schlüssel in einer Datenbanktabelle aus?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage