Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql (Ms Access)分区上的行号()_Sql_Vba_Ms Access - Fatal编程技术网

Sql (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

如何在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
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代码实现它吗?虽然此代码可以回答此问题,但提供有关此代码为什么和/或如何回答此问题的附加上下文可以提高其长期价值。虽然此代码可以回答此问题,提供关于此代码为什么和/或如何回答此问题的附加上下文可提高其长期价值。