2016-12-19 3 views
1

Я делаю некоторое программное обеспечение, которое отслеживает результаты теста. Существует несколько пользователей, информация о которых хранится в пользовательской таблице. Затем отображается таблица прогресса, которая отслеживает счет с датой и пользователем, который оценивает это.Топ n записей на группу sql в доступе

Я уже могу выбрать 3 самые последние записи для выбранного идентификатора пользователя

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

И я могу показать все записи, сгруппированные по LoginID

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

я хочу, чтобы иметь возможность показать- самые последние записи для каждого пользователя в одном запросе, и я не уверен, как использовать вложенные запросы/подзапросы для этого.

Названия полей для таблицы пользователя являются:

LoginID 
Forename  
Surname 
DOB 
Guardian Forename  
Guardian Surname  
Telephone Number 

Названия полей для таблицы прогресса являются:

ProgressID  
LoginID 
Score  
Date Taken 

Любая помощь будет оценена.

ответ

3

У меня была аналогичная проблема, год назад: Top 3 per group including 0

Используя тот же подход, что вернёт последние три даты для каждого LoginID - вы можете получить больше, чем три записи, если связаны даты для того же LoginID ,

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] 
Смежные вопросы