Maison > base de données > tutoriel mysql > Comment puis-je récupérer efficacement le dernier enregistrement de chaque groupe dans une base de données ?

Comment puis-je récupérer efficacement le dernier enregistrement de chaque groupe dans une base de données ?

Mary-Kate Olsen
Libérer: 2024-12-31 04:52:10
original
935 Les gens l'ont consulté

How Can I Efficiently Retrieve the Latest Record for Each Group in a Database?

Détermination du dernier enregistrement au sein d'un groupe via GROUP BY

Dans un scénario de base de données impliquant plusieurs enregistrements avec des critères de regroupement similaires, une tâche courante consiste à récupérer le dernier enregistrement pour chaque groupe. Ceci est illustré dans les plateformes de messagerie, où le message le plus récent de chaque utilisateur est souhaité.

Tentative initiale et inconvénient

Une approche initiale consiste à utiliser la clause GROUP BY pour regrouper les enregistrements en groupes distincts, comme le montre la requête :

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

Cependant, cette requête récupère le message le plus ancien au sein de chaque groupe plutôt que le plus récent un.

Résolution des requêtes

Pour obtenir le dernier enregistrement pour chaque groupe, une approche plus sophistiquée est nécessaire. Cela implique :

  1. Sous-requête : déterminez la dernière valeur d'horodatage au sein de chaque groupe à l'aide de la sous-requête suivante :

    SELECT from_id, MAX(timestamp) timestamp FROM messages GROUP BY from_id
    Copier après la connexion
  2. Rejoindre la sous-requête : rejoignez la table des messages d'origine avec la sous-requête, correspondant aux colonnes from_id et timestamp où ils correspondre.

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

Cette requête génère le dernier message pour chaque from_id distinct dans la table des messages, répondant au problème initial.

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