从表中检索最后N条记录

时间:2014-12-27 16:37:13

标签: sql ms-access ms-office ms-access-2013

我已搜索但未找到我的问题的答案。

我有一个由

组成的表格订单
  • id(主键自动编号)
  • client_id:标识每个客户端(唯一)
  • 日期:每个客户的订单日期

我想在单个视图中检索每个客户的最后N个订单日期

当然,我可以使用SELECT TOP N date FROM orders WHERE client = 'xx' ORDER DESC,然后使用UNION作为客户端的不同值。问题是,随着客户端基础的变化,语句需要修改,并且UNION语句对于大客户群来说是不切实际的。

作为附加要求,这需要在Access SQL中使用。

2 个答案:

答案 0 :(得分:1)

第1步:为每一行创建一个查询,按客户每个日期生成排名顺序。由于Access SQL没有像SQL Server这样的ROW_NUMBER() OVER (...),因此您可以使用以下问题中描述的技术来模拟此问题:

如果您已正确完成第1步,则结果应如下所示:

id   client_id    date      rank
----------------------------------
        1       2014-12-01   7 
        1       2014-12-02   6 
        1       2014-12-05   5 
        1       2014-12-07   4 
        1       2014-12-11   3 
        1       2014-12-14   2 
        1       2014-12-15   1 
        2       2014-12-01   2 
        2       2014-12-02   1
       ... 

第2步:将步骤1中的结果用作子查询,并过滤结果,以便仅返回包含rank <= N的记录。

答案 1 :(得分:1)

我认为以下内容适用于MS Access:

select t.*
from table as t
where t.date in (select top N t2.date
                 from table as t2
                 where t2.client_id = t.client_id
                 order by t2.date desc
                );

MS Access的一个问题是,如果存在关联,top N将检索超过N个记录。如果您想要“N”,则可以在子查询中使用order by date, id