Maison > base de données > tutoriel mysql > Comment récupérer le dernier enregistrement de chaque groupe à l'aide de la clause GROUP BY de SQL ?

Comment récupérer le dernier enregistrement de chaque groupe à l'aide de la clause GROUP BY de SQL ?

Barbara Streisand
Libérer: 2025-01-02 18:23:39
original
367 Les gens l'ont consulté

How to Retrieve the Latest Record from Each Group Using SQL's GROUP BY Clause?

Récupération des derniers enregistrements de groupes à l'aide de GROUP BY

En SQL, la clause GROUP BY est couramment utilisée pour regrouper et agréger les données d'une table . Cependant, dans certains scénarios, vous pouvez rencontrer la nécessité d'obtenir le dernier enregistrement de chaque groupe plutôt que le plus ancien.

Considérez l'exemple suivant :

SELECT * FROM messages GROUP BY from_id
Copier après la connexion

Alors que cette requête vise à regrouper enregistrements basés sur la colonne from_id, il sélectionne le message le plus ancien de chaque groupe car il lui manque un critère de classement d'horodatage. Pour récupérer le dernier message, nous devons modifier la requête comme suit :

SELECT t1.*
FROM messages t1
JOIN (
    SELECT from_id, MAX(timestamp) AS latest_timestamp
    FROM messages
    GROUP BY from_id
) t2 ON t1.from_id = t2.from_id AND t1.timestamp = t2.latest_timestamp
Copier après la connexion

Dans cette requête optimisée, nous utilisons une sous-requête pour identifier les dernières valeurs d'horodatage au sein de chaque groupe. La sous-requête calcule la valeur d'horodatage maximale pour chaque from_id et la stocke sous le nom last_timestamp.

La requête principale rejoint ensuite la table d'origine (messages) avec la table de sous-requête, faisant correspondre les enregistrements basés sur from_id. De plus, il garantit que l'horodatage de la table d'origine (t1.timestamp) correspond au dernier horodatage de chaque groupe (t2.latest_timestamp).

Cette requête affinée récupérera efficacement le dernier message de chaque utilisateur, fournissant vous avec les résultats souhaités.

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