Maison >base de données >tutoriel mysql >Comment récupérer les N premiers enregistrements pour chaque utilisateur dans Access SQL ?
Access SQL : extraction des N premiers enregistrements par utilisateur
Ce guide montre comment récupérer les trois enregistrements les plus récents pour chaque utilisateur dans une base de données Access à l'aide d'une seule requête SQL. Nous exploiterons les requêtes imbriquées pour cette tâche.
Structure de la base de données
Notre base de données se compose de deux tables :
LoginID
, Forename
, Surname
, DOB
, Guardian Forename
, Guardian Surname
, Telephone Number
ProgressID
, LoginID
, Score
, Date Taken
La solution : les requêtes imbriquées
Une approche simple utilisant TOP N
dans une seule requête n'est pas directement prise en charge dans Access SQL pour cette exigence spécifique (récupération des N premiers pour chaque groupe). Au lieu de cela, nous utiliserons une sous-requête pour y parvenir :
La requête interne identifie les trois premières Date Taken
valeurs pour chaque LoginID
:
<code class="language-sql">SELECT TOP 3 PR2.[Date Taken] FROM Progress AS PR2 WHERE PR2.LoginID = PR1.LoginID ORDER BY PR2.[Date Taken] DESC</code>
Cet ensemble de résultats est ensuite utilisé dans la clause IN
de la requête externe pour filtrer la table Progress
:
<code class="language-sql">SELECT PR1.LoginID, PR1.Score, PR1.[Date Taken] FROM Progress AS PR1 WHERE PR1.[Date Taken] IN ( SELECT TOP 3 PR2.[Date Taken] FROM Progress AS PR2 WHERE PR2.LoginID = PR1.LoginID ORDER BY PR2.[Date Taken] DESC ) ORDER BY PR1.LoginID, PR1.[Date Taken] DESC;</code>
Cette requête finale renvoie efficacement les trois enregistrements les plus récents pour chaque LoginID
, soigneusement classés par LoginID
puis par Date Taken
par ordre décroissant (le plus récent en premier). Cela évite les limitations liées à l'application directe de TOP N
aux données groupées dans Access SQL.
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!