Maison > base de données > tutoriel mysql > Comment sélectionner la ligne la plus récente par utilisateur dans une base de données avec horodatages ?

Comment sélectionner la ligne la plus récente par utilisateur dans une base de données avec horodatages ?

Linda Hamilton
Libérer: 2025-01-13 13:06:46
original
494 Les gens l'ont consulté

How to Select the Most Recent Row per User in a Database with Timestamps?

Récupération de l'entrée la plus récente pour chaque utilisateur : une solution de base de données

Défi :

Sélectionner efficacement l'enregistrement le plus récent pour chaque utilisateur dans une table de base de données contenant des horodatages et des indicateurs d'état (« entrée » ou « sortie ») peut être complexe, en particulier lorsqu'un utilisateur a plusieurs entrées partageant le même dernier horodatage.

Approche :

Ce problème est résolu à l'aide de deux requêtes SQL distinctes :

1. Requête de plusieurs enregistrements correspondants :

Cette requête identifie tous les enregistrements avec l'horodatage maximum pour chaque utilisateur.

<code class="language-sql">SELECT t1.*
FROM lms_attendance t1
WHERE t1.time = (SELECT MAX(t2.time)
                 FROM lms_attendance t2
                 WHERE t2.user = t1.user);</code>
Copier après la connexion

Sortie :

ID USER TIME IO
2 9 1370931664 out
3 6 1370932128 out
5 12 1370933037 in

2. Requête pour un seul enregistrement correspondant :

Cette requête renvoie uniquement l'enregistrement le plus récent par utilisateur, en donnant la priorité à l'ID le plus élevé en cas de liens d'horodatage.

<code class="language-sql">SELECT t1.*
FROM lms_attendance t1
WHERE t1.id = (SELECT t2.id
                 FROM lms_attendance t2
                 WHERE t2.user = t1.user
                 ORDER BY t2.time DESC, t2.id DESC
                 LIMIT 1);</code>
Copier après la connexion

Sortie :

ID USER TIME IO
2 9 1370931664 out
3 6 1370932128 out
5 12 1370933037 in

Explication :

  • La première requête utilise une sous-requête corrélée pour trouver le dernier horodatage (MAX(time)) pour chaque utilisateur, puis récupère toutes les entrées correspondant à cet horodatage. Cela gère les situations où plusieurs enregistrements ont le même horodatage le plus récent.
  • La deuxième requête utilise ORDER BY time DESC, id DESC pour donner la priorité au dernier horodatage, puis à l'ID le plus élevé, garantissant ainsi qu'un enregistrement unique et définitif le plus récent est sélectionné à l'aide de LIMIT 1.

Le choix entre ces requêtes dépend de si vous avez besoin de tous les enregistrements avec le dernier horodatage ou uniquement de l'enregistrement le plus récent par utilisateur. La deuxième requête offre une solution plus concise lorsqu'un seul enregistrement est requis.

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