访问中每组 sql 的前 n 条记录
Top n records per group sql in access
我正在制作一些跟踪测试分数的软件。有多个用户,详细信息存储在一个用户table中。然后有一个进度 table,它跟踪带有日期和得分的用户的分数。
我已经可以 select 所选用户 ID 的 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];
我希望能够在一个查询中显示每个用户的 3 条最新记录,但我不确定如何使用嵌套 queries/subqueries 来实现这一点。
用户 table 的字段名称是:
LoginID
Forename
Surname
DOB
Guardian Forename
Guardian Surname
Telephone Number
进度 table 的字段名称是:
ProgressID
LoginID
Score
Date Taken
如有任何帮助,我们将不胜感激。
一年前我遇到过类似的问题:
使用相同的方法,这将 return 每个 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]
你可以把你没有排名靠前的陈述放在括号里,然后在第二步做你的排名就这么简单
SELECT Top 3 step1.* FROM (YOUR STATEMENT...) AS step1
这个问题比较老,但它可能是一个解决方案
我正在制作一些跟踪测试分数的软件。有多个用户,详细信息存储在一个用户table中。然后有一个进度 table,它跟踪带有日期和得分的用户的分数。
我已经可以 select 所选用户 ID 的 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];
我希望能够在一个查询中显示每个用户的 3 条最新记录,但我不确定如何使用嵌套 queries/subqueries 来实现这一点。
用户 table 的字段名称是:
LoginID
Forename
Surname
DOB
Guardian Forename
Guardian Surname
Telephone Number
进度 table 的字段名称是:
ProgressID
LoginID
Score
Date Taken
如有任何帮助,我们将不胜感激。
一年前我遇到过类似的问题:
使用相同的方法,这将 return 每个 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]
你可以把你没有排名靠前的陈述放在括号里,然后在第二步做你的排名就这么简单
SELECT Top 3 step1.* FROM (YOUR STATEMENT...) AS step1
这个问题比较老,但它可能是一个解决方案