访问前 N 个查询,其中 N 个按组更改

Posted

技术标签:

【中文标题】访问前 N 个查询,其中 N 个按组更改【英文标题】:Access Top N Query where N changes by group 【发布时间】:2015-11-17 22:29:27 【问题描述】:

我正在尝试在 Microsoft Access 中编写一个前 n 值查询,其中 n 可能会按组更改。例如,一组可能是前 3 名记录,另一组可能是前 2 名记录,另一组可能是前 4 名记录。我有一个带有“TopN”字段的表格,我在其中存储了要为该组显示的值。

有效的前 3 名查询示例,我正在尝试用前 N 替换前 3,其中 N 是 DLookup 或使用 TopN 字段中的值的东西:

SELECT Payout.GDate, Payout.[Game Type], Payout.Denom, Payout.Segment, Payout.Manufacturer_Description, Payout.Stand, Payout.Payout
  FROM Payout, PayoutShowSegment
  WHERE (((Payout.Payout) IN (SELECT TOP 3 [Payout] 
                                FROM [Payout] 
                                WHERE [Payout].[Segment]=[PayoutShowSegment].[Segment])))
  ORDER BY Payout.[Game Type], Payout.Denom, Payout.Payout DESC;

【问题讨论】:

尝试在 access 中模拟 row_number,然后您可以对每个类别进行查找。 ***.com/questions/21917637/… 【参考方案1】:

几个月前我遇到了类似的问题。

使用您的查询,这样的事情应该可以工作:

SELECT      T1.GDate, 
            T1.[Game Type], 
            T1.Denom, 
            T1.Segment, 
            T1.Manufacturer_Description, 
            T1.Stand, 
            T1.Payout
FROM        Payout T1 INNER JOIN Payout T2 ON
                T1.[Game Type] = T2.[Game Type] AND
                T1.Denom = T2.Denom AND
                T1.Segment = T2.Segment AND
                T1.Manufacturer_Description = T2.Manufacturer_Description AND
                T1.Stand = T2.Stand AND
                T1.Payout = T2.Payout AND
                T1.GDate >= T2.GDate
GROUP BY    T1.GDate, 
            T1.[Game Type], 
            T1.Denom, 
            T1.Segment, 
            T1.Manufacturer_Description, 
            T1.Stand, 
            T1.Payout
HAVING      COUNT(*) <= (
                         SELECT TopN
                         FROM   MyOtherTable
                         WHERE  MyOtherTable.IDField = T1.IDField
                        )
ORDER BY    T1.GDate

注意 - 连接可能会简化为 Payout 表中的 PK。

欲了解更多信息,请访问此网站:http://www.sql-ex.com/help/select16.php

【讨论】:

感谢您的建议/示例。我使用它并不断取回整个表,而不是每组的 TopN 记录。尝试对语句的不同部分进行多次修改,结果各不相同。我想我将使用 VBA 创建一个联合查询,逐步遍历每个段(大约有 20 个)。 真可惜。我的方法使用@Juan Carlos Oropeza 在他的评论中提到的行编号,并选择行号小于或等于所需数量的记录。非常值得研究。

以上是关于访问前 N 个查询,其中 N 个按组更改的主要内容,如果未能解决你的问题,请参考以下文章

如何按组从值列表中查询第 n 个值? MySQL

R(和 dplyr?) - 按组从数据帧中采样,最大样本大小为 n

Tridion Taxonomy 查询示例的任何好的来源

获取每组分组结果的前 n 条记录

获取每组分组结果的前 n 条记录

SQL查询从列表中获取前“n”个分数