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
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
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!