Maison >base de données >tutoriel mysql >Comment récupérer efficacement la dernière ligne par groupe dans MySQL ?
Problème :
Trouver une méthode plus efficace pour récupérer la dernière ligne pour chaque groupe d'une table MySQL, en utilisant une requête similaire à :
select * from foo as a where a.id = (select max(id) from foo where uid = a.uid group by uid) group by uid;
Solution potentielle :
Considérez cette requête alternative :
SELECT t1.* FROM foo t1 LEFT JOIN foo t2 ON t1.id < t2.id AND t1.uid = t2.uid WHERE t2.id is NULL;
Explication :
Cette requête gauche joint chaque ligne de la table avec son successeur en fonction de la colonne ID. Si aucun successeur n'existe (c'est-à-dire s'il s'agit de la dernière ligne d'un groupe), la colonne t2.id sera NULL. En filtrant les valeurs NULL, nous isolons efficacement les dernières lignes de chaque groupe.
Remarques supplémentaires :
Utilisez EXPLAIN pour analyser les performances de la requête d'origine et de l'alternative. solution.
Cette méthode est particulièrement utile pour les grands ensembles de données et les regroupements complexes. Pour les cas plus simples, d'autres approches peuvent être plus efficaces.
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!