访问前 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 个按组更改的主要内容,如果未能解决你的问题,请参考以下文章