Maison > base de données > tutoriel mysql > Comment récupérer efficacement l'emplacement historique le plus récent pour un ID d'enregistrement donné à l'aide de SQL ?

Comment récupérer efficacement l'emplacement historique le plus récent pour un ID d'enregistrement donné à l'aide de SQL ?

DDD
Libérer: 2024-12-07 04:46:12
original
593 Les gens l'ont consulté

How to Efficiently Retrieve the Most Recent Historic Location for a Given Record ID Using SQL?

Récupération d'emplacements historiques à l'aide de la date MAX dans une instruction de jointure

Lors de la récupération d'emplacements historiques pour un ID d'enregistrement spécifique, un utilisateur a rencontré des problèmes de performances et entrées en double dans les résultats. L'utilisateur a tenté de résoudre ce problème en joignant plusieurs tables et en filtrant par ID_reçu, mais le résultat attendu n'a pas été obtenu.

Pour résoudre ce problème, il est recommandé de modifier la requête comme suit :

SELECT t1.received_id
     , t1.transaction_id
     , t1.date_modified
     , l.location
  FROM transactions t1
  JOIN ( SELECT received_id, MAX(date_modified) maxmodify FROM transactions GROUP BY received_id) max_record
    ON max_record.received_id = t1.received_id 
   AND max_record.maxmodify = t1.date_modified
  JOIN locations l
    ON l.location_id = t1.location_id
  JOIN received r
    ON r.received_id = t1.received_id
 WHERE t1.received_id = '1782'
 ORDER 
    BY t1.date_modified DESC
Copier après la connexion

Le changement clé consiste à rejoindre la table des transactions deux fois : une fois pour la requête principale et une fois dans une sous-requête pour trouver la valeur date_modified maximale pour chaque reçu_id. Cette sous-requête est ensuite utilisée pour filtrer la requête principale et renvoyer uniquement les lignes avec les dernières valeurs date_modified.

Le cœur de cette technique est encapsulé dans le modèle général suivant :

SELECT x.*
  FROM my_table x
  JOIN (SELECT id,MAX(thing) max_thing FROM my_table GROUP BY id) y 
    ON y.id = x.id 
   AND y.max_thing = x.thing;
Copier après la connexion

Ce Cette approche élimine efficacement les entrées en double et fournit le résultat souhaité : afficher uniquement la dernière heure modifiée pour chaque ID d'enregistrement et emplacement.

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