2016-12-19 10 views
1

テストのスコアを追跡するソフトウェアを作成しています。複数のユーザーがあり、その詳細はユーザー表に保管されています。その後、日付とスコアのユーザーのスコアを追跡する進捗表があります。グループごとの上位n個のレコードアクセス中のSQL sql

私はすでに選ばれたユーザーID

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

のために3つの最新のレコードを選択することができると私は私が3を表示できるようにしたいログインID

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

でグループ化されたすべてのレコードを表示することができます1つのクエリで各ユーザの最新のレコードを取得できます。また、ネストされたクエリ/サブクエリを使用する方法がわかりません。ユーザー表の

フィールド名は次のとおりです。

LoginID 
Forename  
Surname 
DOB 
Guardian Forename  
Guardian Surname  
Telephone Number 

進捗テーブルのフィールド名は次のとおりです。

ProgressID  
LoginID 
Score  
Date Taken 

任意の助けをいただければ幸いです。

答えて

3

私は一年前に同様の問題があった:同じアプローチを使用してTop 3 per group including 0

を、これはそれぞれのログインIDの最新の3日を返します - 同じログインIDのために結ばれた日付がある場合は、以上の3つのレコードを得ることができます。

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] 
関連する問題