Data我在Access中有一个表,其中包含与每个零件编号关联的零件编号和PriceYr以及价格。有超过10,000条记录,PartNumber重复并且具有与之关联的不同PriceYr和Price。但是,我需要一个查询来查找与其关联的5个最新价格和日期。 我尝试使用MAX(PriceYr)但是,它只为每个PartNumber返回1个最近的记录。
我也尝试了以下查询,但它似乎不起作用。
SELECT Catalogs.PartNumber,Catalogs.PriceYr, Catalogs.Price FROM Catalogs
WHERE Catalogs.PriceYr in
(SELECT TOP 5 Catalogs.PriceYr
FROM Catalogs as Temp
WHERE Temp.PartNumber = Catalogs.PartNumber
ORDER By Catalogs.PriceYr DESC)
任何帮助将不胜感激。谢谢。
Desired Result我想要的。
答案 0 :(得分:1)
考虑使用 rank 变量进行过滤的相关计数子查询。现在,您在匹配 PartNumber 而不是每个 PartNumber 时,总体排名前5位。
SELECT main.*
FROM
(SELECT c.PartNumber, c.PriceYr, c.Price,
(SELECT Count(*)
FROM Catalogs AS Temp
WHERE Temp.PartNumber = c.PartNumber
AND Temp.PriceYr >= c.PriceYr) As rank
FROM Catalogs c
) As main
WHERE main.rank <= 5
答案 1 :(得分:0)
MAX()
是一个聚合函数,意味着它将所有数据分组并获取指定列中的最大值。您需要使用GROUP BY
语句来阻止查询将整个数据集分组到一行中。
另一方面,您的查询似乎不必要地使用子查询。以下查询应该可以正常工作:
SELECT TOP 5 c.PartNumber, c.PriceYr, c.Price
FROM Catalogs c
ORDER BY c.PriceYr DESC
WHERE c.PartNumber = @partNumber -- if you want the query to
-- work on a specific part number
(请发布一个表创建查询以确保此示例有效)