如何在 MS ACCESS 上使用过度分区转换 row_number() 函数?我想要实现的是:
从这张表中:
ID | EntryDate
10 | 2016-10-10
10 | 2016-12-10
10 | 2016-12-31
10 | 2017-01-31
10 | 2017-03-31
11 | 2015-01-31
11 | 2017-01-31
Run Code Online (Sandbox Code Playgroud)
对于此输出,仅显示每个 ID 的前 3 个最新:
ID | EntryDate
10 | 2016-12-31
10 | 2017-01-31
10 | 2017-03-31
11 | 2015-01-31
11 | 2017-01-31
Run Code Online (Sandbox Code Playgroud)
在 SQL Server 上,我可以使用以下代码实现这一点:
select T.[ID],
T.[AptEndDate],
from (
select T.[ID],
T.[AptEndDate],
row_number() over(partition by T.[ID] order by T.[AptEndDate] desc) as rn
from Table1 as T
) as T
where T.rn <= 3;
Run Code Online (Sandbox Code Playgroud)
考虑一个可以在任何 RDBMS 中工作的计数相关子查询。
select T.[ID], T.[EntryDate]
from
(select sub.[ID],
sub.[EntryDate],
(select count(*) from Table1 c
where c.ID = sub.ID
and c.[EntryDate] >= sub.[EntryDate]) as rn
from Table1 as sub
) as T
where T.rn <= 3;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3475 次 |
| 最近记录: |