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;
In dieser Abfrage:
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;
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!