Maison > base de données > tutoriel mysql > le corps du texte

Comment récupérer l'enregistrement de version le plus élevé pour chaque ID dans la clause GROUP BY de MySQL ?

Patricia Arquette
Libérer: 2024-11-21 00:06:17
original
622 Les gens l'ont consulté

How to Retrieve the Highest Version Record for Each ID in MySQL's GROUP BY Clause?

Contrôle de la ligne renvoyée dans MySQL Group By

Dans MySQL, récupérer la ligne souhaitée à partir d'un groupe de données peut poser un défi. Cet article explique comment établir un contrôle sur la ligne renvoyée dans un groupe par scénario.

Problème :

Une table de base de données contient plusieurs versions d'enregistrements identifiés par une colonne d'identifiant. et une colonne version_id. L'objectif est d'interroger la table et de renvoyer uniquement l'enregistrement avec le version_id le plus élevé pour chaque identifiant unique.

Solution 1 (approche de sous-requête) :

Une approche consiste à utiliser une sous-requête pour classer les lignes en fonction du version_id par ordre décroissant :

SELECT *
FROM (SELECT * FROM table ORDER BY version_id DESC) t1
GROUP BY t1.id
Copier après la connexion

Cette méthode crée effectivement une table temporaire, trie les données, puis les regroupe pour récupérer la ligne souhaitée.

Solution 2 (utilisation de Max et de jointures) :

Une autre méthode utilise la fonction MAX() et joint pour obtenir le même résultat :

SELECT *
FROM (SELECT id, MAX(version_id) AS version_id FROM table GROUP BY id) t1
INNER JOIN table t2 ON t2.id = t1.id AND t1.version_id = t2.version_id
Copier après la connexion

Cette approche identifie d'abord le version_id maximum pour chaque identifiant, puis rejoint la table d'origine pour obtenir l'enregistrement complet avec la version la plus élevée.

Avantages et considérations :

L'approche de sous-requête peut créer une table temporaire en mémoire, ce qui peut avoir un impact sur les performances pour les grands ensembles de données. D'un autre côté, elle peut être plus simple à comprendre et à mettre en œuvre.

La méthode basée sur les jointures est généralement plus efficace pour les ensembles de données plus volumineux car elle évite de créer une table temporaire. Cependant, il suppose la présence d'un index sur les colonnes (id, version_id) pour des performances optimales.

Les deux solutions nécessitent un index adapté pour une exécution efficace.

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