2016-12-19 33 views
1

我正在製作一些跟蹤測試分數的軟件。有多個用戶,其中的詳細信息存儲在用戶表中。然後是一張進度表,跟蹤日期和用戶得分情況。前n個記錄每個組訪問sql

我已經可以選擇3條最近的記錄爲選定的用戶ID

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

而且我可以顯示通過登錄ID

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

分組的所有記錄,我希望能夠表現出3一個查詢中每個用戶的最新記錄,我不確定如何使用嵌套查詢/子查詢來完成此操作。

用戶表中的字段名稱是:

LoginID 
Forename  
Surname 
DOB 
Guardian Forename  
Guardian Surname  
Telephone Number 

的進度表中的字段名稱是:

ProgressID  
LoginID 
Score  
Date Taken 

任何幫助,將不勝感激。

回答

3

我一年前也有類似的問題:Top 3 per group including 0

使用相同的方法,這將返回每個登錄ID最新的三個日期 - 如果爲同一登錄ID捆綁的約會,你可能會獲得超過三個記錄。

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]