需要选择最近的记录,按客户和项目代码分组

时间:2014-06-17 18:21:06

标签: sql sql-server

我有一个基本的订单明细表,其中包含:docDatecustomerCodeitemCodePriceQuantity。看了一些类似的问题,但他们似乎没有考虑到我需要的一切,而且我没有重新考虑其他解决方案。

最终目标:仅限客户购买的每件商品的最新记录。 (所以每个项目一条记录)

价格和数量变化记录到记录,我只想要最新的。

这为我提供了每个项目(代码和日期)的最新条目

SELECT itemCode, MAX(docDate) AS docDate
FROM RDR1 
WHERE customerCode= 'TEST001' 
GROUP BY ItemCode

现在我需要能够从最近的行中提取其他信息,例如价格和数量。

3 个答案:

答案 0 :(得分:1)

我想你想要这样的事情:

   select
    * -- or whatever columns you actually want
    from
    RDR1
    inner join
    (SELECT itemCode, MAX(docDate) AS docDate
    FROM RDR1 
    WHERE customerCode= 'TEST001' 
    GROUP BY ItemCode) MD
    on MD.docDate = RDR1.docDate
and md.ItemCode = RDR1.ItemCode

答案 1 :(得分:0)

SELECT distinct (ItemCode), docDate, Price, Quantity
FROM RDR1
WHERE customerCode= 'TEST001' 
ORDER BY docDate DESC

答案 2 :(得分:0)

使用ROW_NUMBER

SELECT *
FROM (
    SELECT ROW_NUMBER() OVER (PARTITION BY itemCode ORDER BY docDate DESC) AS RowNumber, *
    FROM RDR1
    WHERE customerCode = 'TEST001'
) x
WHERE x.RowNumber = 1
ORDER BY x.itemCode

要了解多个客户的概述,请将customerCode添加到分区:

SELECT ROW_NUMBER() OVER (PARTITION BY customerCode, itemCode ORDER BY docDate DESC) AS RowNumber, *