MS Access 中按组排列的前 5 条记录

Posted

技术标签:

【中文标题】MS Access 中按组排列的前 5 条记录【英文标题】:Top 5 records by group in MS Access 【发布时间】:2017-10-05 09:36:26 【问题描述】:

下面的代码返回所有记录:-

SELECT b.BROKERAGE_NAME, q.VAL_DATE
FROM TBLQUOTESNEW q LEFT JOIN TBLBROKERAGESNEW b ON q.BROKERAGE_ID = b.ID
WHERE q.VAL_DATE Is Not Null

是否可以返回每个 BROKERAGE_NAME 的前 5 条记录,其中 VAL_DATE 是递减的?

包括

    Brokerage A    02/10/2017
    Brokerage A    02/10/2017
    Brokerage A    02/10/2017
    Brokerage A    02/10/2017
    Brokerage A    01/10/2017
    Brokerage B    06/06/2016

排除(因为不在前 5 名中)

    Brokerage A    30/09/2017

【问题讨论】:

我本来建议使用SELECT TOP 5ORDER BY VAL_DATE DESC,但这只有在您的日期有不同的时间范围时才有效。因为它是 2/10/2017 将是第一名,30/09/2017 将是第二名。 查看allenbrowne.com/subquery-01.html,每组前n个部分 Top n records per group sql in access的可能重复 必须同意@ErikvonAsmuth。正在研究如何做,那是我找到的帖子,我认为 Allenbrowne 链接是我用来在副本中获得答案的链接。 它不是重复的(反正不是我的) 【参考方案1】:
SELECT TOP 5 
      b.BROKERAGE_NAME,
      q.VAL_DATE
FROM 
      TBLQUOTESNEW q 
LEFT JOIN 
      TBLBROKERAGESNEW b 
      ON q.BROKERAGE_ID = b.ID
WHERE 
      q.VAL_DATE Is Not Null 
GROUP BY 
      BROKERAGE_NAME 
ORDER BY 
      VAL_DATE DESC`

【讨论】:

这不会返回问题中指定的结果。它返回前 5 名经纪商。不是每个经纪公司的前 5 个 VAL_DATE。 那是因为你的样本数据只有 Brokerage A - 他可能和我做的一样,只是复制你的样本并使用它。完全忽略了您希望它由经纪公司拆分。 :) @DarrenBartrup-Cook - 改进了示例数据 :)

以上是关于MS Access 中按组排列的前 5 条记录的主要内容,如果未能解决你的问题,请参考以下文章

猪中按查询的内部组中的前 3 条记录

MS Access 2003 - 自动在表单的列表框中显示最后一条记录,而不是第一条

R中按组月的平均温度

MS Access-CopyFromRecordset

在 R 中按组创建组合

在单个 R data.table 中按组有效地定位