【问题标题】:Access Top N Query where N changes by group访问前 N 个查询,其中 N 个按组更改
【发布时间】: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;

【问题讨论】:

标签: sql ms-access vba


【解决方案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 在他的评论中提到的行编号,并选择行号小于或等于所需数量的记录。非常值得研究。
猜你喜欢
  • 1970-01-01
  • 2010-10-29
  • 2021-07-11
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 2014-09-06
  • 1970-01-01
相关资源
最近更新 更多