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