获取每个号码的5个最新记录

时间:2018-02-20 16:21:40

标签: sql ms-access ms-access-2013

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我想要的。

2 个答案:

答案 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

(请发布一个表创建查询以确保此示例有效)