Sélection des valeurs les plus récentes pour chaque clé dans une table de base de données
Lorsque vous travaillez avec des tables contenant des données de capteur ou d'autres informations horodatées, il Il est souvent nécessaire de récupérer les entrées les plus récentes pour chaque valeur de clé individuelle. Bien qu'une approche simple impliquant le regroupement par clé et le classement par horodatage maximum puisse sembler intuitive, elle peut entraîner des erreurs dues à l'inclusion de champs non clés dans l'agrégation.
Solution alternative utilisant une sous-requête :
Une méthode fiable résout ce problème en utilisant une sous-requête pour identifier l'horodatage maximum pour chaque clé value :
SELECT sensorID, timestamp, sensorField1, sensorField2 FROM sensorTable WHERE timestamp = (SELECT MAX(timestamp) FROM sensorTable WHERE sensorID = sensorTable.sensorID) ORDER BY sensorID, timestamp;
Dans cette requête :
Solution supplémentaire utilisant JOIN :
Une solution alternative utilise un JOIN opération :
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;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!