Maison > base de données > tutoriel mysql > Comment récupérer efficacement la dernière date et valeur d'enregistrement pour chaque utilisateur dans une base de données ?

Comment récupérer efficacement la dernière date et valeur d'enregistrement pour chaque utilisateur dans une base de données ?

Mary-Kate Olsen
Libérer: 2025-01-15 16:56:45
original
701 Les gens l'ont consulté

How to Efficiently Retrieve the Latest Record Date and Value for Each User in a Database?

Extraction de la date d'entrée et de la valeur les plus récentes pour chaque utilisateur

Ce guide montre comment interroger efficacement une table de base de données d'entrées de connexion utilisateur pour récupérer la dernière date et sa valeur associée pour chaque utilisateur. Nous explorerons deux méthodes : une approche de jointure traditionnelle et une méthode plus robuste utilisant des fonctions de fenêtre.

Méthode 1 : jointure interne avec sous-requête

Une approche courante utilise une jointure interne avec une sous-requête pour trouver la date maximale pour chaque utilisateur :

<code class="language-sql">select t.username, t.date, t.value
from MyTable t
inner join (
    select username, max(date) as MaxDate
    from MyTable
    group by username
) tm on t.username = tm.username and t.date = tm.MaxDate</code>
Copier après la connexion

Cette requête récupère efficacement le dernier enregistrement pour chaque nom d'utilisateur. Cependant, un inconvénient potentiel est qu'il peut renvoyer plusieurs entrées si plusieurs enregistrements partagent la même date maximale pour un utilisateur donné.

Méthode 2 : Fonctions de fenêtre pour gérer les dates en double

Pour gérer les dates en double potentielles, les fonctions de fenêtre offrent une solution supérieure :

<code class="language-sql">select x.username, x.date, x.value 
from (
    select username, date, value,
        row_number() over (partition by username order by date desc) as _rn
    from MyTable 
) x
where x._rn = 1</code>
Copier après la connexion

Cette méthode attribue un classement unique à chaque enregistrement pour chaque utilisateur, classé par date et par ordre décroissant. En filtrant les lignes de rang 1 (_rn = 1), nous garantissons la récupération de l'enregistrement le plus récent, même en présence de plusieurs entrées avec la même date la plus récente. Cela garantit l'exactitude et évite toute ambiguïté.

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