Maison > base de données > tutoriel mysql > Comment récupérer efficacement les données de localisation les plus récentes pour chaque enregistrement dans une déclaration jointe ?

Comment récupérer efficacement les données de localisation les plus récentes pour chaque enregistrement dans une déclaration jointe ?

Susan Sarandon
Libérer: 2024-12-08 02:37:10
original
813 Les gens l'ont consulté

How to Efficiently Retrieve the Most Recent Location Data for Each Record in a Joined Statement?

Sélection de la date la plus récente dans une déclaration jointe : dépannage pour la récupération des données d'emplacement historique

Cette requête vise à récupérer les emplacements historiques d'un enregistrement et leurs dates correspondantes. Cependant, l'implémentation actuelle prend un temps d'exécution excessivement long et produit des enregistrements en double. Le résultat attendu est une liste simplifiée d'enregistrements avec leurs emplacements les plus récents.

La requête d'origine tente de trouver la date la plus récente associée à chaque identifiant d'enregistrement en exécutant une opération d'auto-jointure. Cependant, cette approche est inefficace et peut entraîner des problèmes de performances, en particulier pour les ensembles de données plus volumineux.

Corriger la requête

Pour optimiser la requête, nous pouvons utiliser la version corrigée suivante :

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

Explication

Dans cette requête, nous introduisons une expression de table commune (CTE) pour trouver la date maximale pour chaque identifiant d'enregistrement dans la table des transactions. Le CTE est :

SELECT received_id, MAX(date_modified) AS maxmodify
FROM transactions
GROUP BY received_id
Copier après la connexion

On joint ensuite la table des transactions d'origine (t1) avec ce CTE (max_record) sur le champ reçu_id. De plus, nous filtrons sur la colonne maxmodify pour garantir que seules les transactions portant la date la plus récente sont incluses. Cela optimise la requête en évitant les jointures et les doublons inutiles.

Avec cette requête optimisée, nous pouvons obtenir efficacement les emplacements historiques de chaque enregistrement, garantissant ainsi que nous récupérons uniquement l'emplacement le plus récent pour chaque identifiant d'enregistrement unique.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal