Maison > base de données > tutoriel mysql > Comment sélectionner efficacement les valeurs les plus récentes pour chaque clé dans une table de base de données ?

Comment sélectionner efficacement les valeurs les plus récentes pour chaque clé dans une table de base de données ?

DDD
Libérer: 2024-12-31 20:25:19
original
1014 Les gens l'ont consulté

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

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;
Copier après la connexion

Dans cette requête :

  • La table principale sensorTable est consultée deux fois.
  • La sous-requête interne récupère l'horodatage maximum (MAX(timestamp) ) pour chaque sensorID et le compare à l'horodatage correspondant de la table principale.
  • Lignes avec le plus récent les horodatages sont sélectionnés pour chaque valeur clé.
  • Les colonnes récupérées incluent le sensorID, l'horodatage, sensorField1 et sensorField2.

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;
Copier après la connexion
  • Cette requête crée une table temporaire (s2) contenant le maximum d'horodatages pour chaque sensorID.
  • s1 (table principale) est jointe à s2 sur le sensorID et colonnes d'horodatage pour sélectionner les lignes les plus récentes pour chaque valeur clé.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal