Sql (Ms Access)分区上的行号()
如何在MS ACCESS上转换具有过分区的行数函数?我想要实现的是: 从该表中:Sql (Ms Access)分区上的行号(),sql,vba,ms-access,Sql,Vba,Ms Access,如何在MS ACCESS上转换具有过分区的行数函数?我想要实现的是: 从该表中: 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 此输出仅显示每个ID的前3个最新版本: ID | EntryDate 10 | 2016-12-31 10 | 2017-01-31
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
此输出仅显示每个ID的前3个最新版本:
ID | EntryDate
10 | 2016-12-31
10 | 2017-01-31
10 | 2017-03-31
11 | 2015-01-31
11 | 2017-01-31
在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;
任何使用OVER子句的函数都称为窗口函数。不幸的是,MS Access不支持窗口功能。在这种情况下,最简单的解决方案可能是返回VBA代码:使用OVER子句的任何东西都称为窗口功能。不幸的是,MS Access不支持窗口功能。在这种情况下,最简单的解决方案可能是返回VBA代码:考虑可以在任何RDBMS中工作的计数相关子查询 选择T.[ID],T.[EntryDate] 从…起 选择子项[ID], 子【入口日期】, 从表1c中选择count* 其中c.ID=子ID c.[EntryDate]>=子[EntryDate]作为rn 表1中的子项 as T
其中T.rn考虑可以在任何RDBMS中工作的计数相关子查询 选择T.[ID],T.[EntryDate] 从…起 选择子项[ID], 子【入口日期】, 从表1c中选择count* 其中c.ID=子ID c.[EntryDate]>=子[EntryDate]作为rn 表1中的子项 as T
其中T.rn使用Top n可能更简单、更快-正如您提到的:
Select T.[ID], T.[EntryDate]
From Table1 As T
Where T.[EntryDate] In
(Select Top 3 S.[EntryDate]
From Table1 As S
Where S.[ID] = T.[ID]
Order By S.[EntryDate] Desc)
Order By T.[ID] Asc, T.[EntryDate] Asc
使用Top n可能更简单、更快—正如您提到的:
Select T.[ID], T.[EntryDate]
From Table1 As T
Where T.[EntryDate] In
(Select Top 3 S.[EntryDate]
From Table1 As S
Where S.[ID] = T.[ID]
Order By S.[EntryDate] Desc)
Order By T.[ID] Asc, T.[EntryDate] Asc
您知道我如何使用VBA代码实现它吗?您知道我如何使用VBA代码实现它吗?虽然此代码可以回答此问题,但提供有关此代码为什么和/或如何回答此问题的附加上下文可以提高其长期价值。虽然此代码可以回答此问题,提供关于此代码为什么和/或如何回答此问题的附加上下文可提高其长期价值。