Récupération de lignes avec des horodatages récents pour chaque valeur clé
Dans un tableau avec des données de capteur, vous rencontrez le besoin de sélectionner les lignes les plus récentes pour chaque ID de capteur unique. Le défi se pose lorsque la requête souhaitée renvoie une erreur en raison d'un regroupement non spécifié.
Pour résoudre ce problème, il existe deux approches efficaces :
Approche 1 : Requête imbriquée
Cette méthode utilise une requête imbriquée pour identifier l'horodatage maximum pour chaque capteur ID :
SELECT sensorID, timestamp, sensorField1, sensorField2 FROM sensorTable s1 WHERE timestamp = (SELECT MAX(timestamp) FROM sensorTable s2 WHERE s1.sensorID = s2.sensorID) ORDER BY sensorID, timestamp;
Approche 2 : Fonction de fenêtre
Vous pouvez également exploiter une fonction de fenêtre, MAX() sur une fenêtre coulissante, pour obtenir le résultat souhaité :
SELECT sensorID, MAX(timestamp) OVER (PARTITION BY sensorID ORDER BY timestamp) AS max_timestamp, sensorField1, sensorField2 FROM sensorTable ORDER BY sensorID, max_timestamp;
Les deux approches sélectionnent effectivement une seule ligne pour chaque ID de capteur, représentant le point de données le plus récent. Le choix dépend de l'environnement de base de données spécifique et des exigences de performances.
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!