2016-12-19 5 views
1

Ich mache einige Software, die die Ergebnisse eines Tests verfolgt. Es gibt mehrere Benutzer, deren Details in einer Benutzertabelle gespeichert sind. Es gibt dann eine Fortschrittstabelle, die eine Partitur mit dem Datum und dem Benutzer, der sie bewertet, verfolgt.Top n Datensätze pro Gruppe sql im Zugriff

Ich kann schon wählen Sie die drei neuesten Datensätze für einen ausgewählten Benutzer-ID

SELECT TOP 3 Progress.LoginID, Progress.Score, Progress.[Date Taken] 
FROM Progress 
WHERE (((Progress.LoginID)=[Enter LoginID:])) 
ORDER BY Progress.[Date Taken] DESC; 

Und ich kann alle Datensätze von LoginID gruppiert anzeigen

SELECT Progress.LoginID, Progress.Score, Progress.[Date Taken] 
FROM Progress 
GROUP BY Progress.LoginID, Progress.Score, Progress.[Date Taken]; 

Ich will das 3 zeigen können, die neuesten Datensätze für jeden Benutzer in einer Abfrage und ich bin mir nicht sicher, wie man dazu verschachtelte Abfragen/Unterabfragen verwendet.

Die Feldnamen für die Benutzertabelle sind:

LoginID 
Forename  
Surname 
DOB 
Guardian Forename  
Guardian Surname  
Telephone Number 

Die Feldnamen für den Fortschritt Tabelle sind:

ProgressID  
LoginID 
Score  
Date Taken 

Jede Hilfe würde geschätzt.

Antwort

3

hatte ich ein ähnliches Problem vor einem Jahr: Top 3 per group including 0

mit dem gleichen Ansatz, dies wird die letzten drei Tage, für jeden LoginID zurückkehren - Sie mehr als drei Datensätze erhalten können, wenn es Daten für die gleiche LoginID gebunden sind .

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 PR2 
         WHERE PR2.LoginID = PR1.LoginID 
         ORDER BY PR2.[Date Taken] DESC 
         ) 
ORDER BY LoginID, [Date Taken] 
Verwandte Themen