2014-03-05 72 views
0

在Microsoft SQL数据库上,我正在寻找找到最近的销售日期和客户项目的方式。 如果两位顾客购买了同样的商品,我只想要其中一位顾客。选择最近的交易项目

每个项目只应在我的查询中一次。

这里是我的数据的例子:

Rownumber Item Customer  Date  QTY 
1   10  2000   01/01/2014 5 
2   10  3000   02/01/2014 6 
3   10  2000   02/01/2014 4 
4   20  4000   10/01/2014 1 
5   20  4000   01/01/2014 8 
6   30  5000   08/01/2014 5 
7   40  2000   07/01/2014 10 

我的结果应该不会停像

2   10  3000   02/01/2014 6 
4   20  4000   10/01/2014 1 
6   30  5000   08/01/2014 5 
7   40  2000   07/01/2014 10 

不是行2,也可能是排第三,因为他们是在同一天。我只需要其中一个。

我会猜测它是一些RANK函数,但我不能让它工作。

回答

1

使用CTE

;WITH Latest 
AS 
(
    SELECT *, 
     rn = ROW_NUMBER() OVER (PARTITION BY Customer ORDER BY [Date] DESC) 
    FROM TABLE 
) 
SELECT * FROM Latest 
WHERE rn = 1 

将子查询

SELECT * 
FROM 
(
    SELECT *, 
     rn = ROW_NUMBER() OVER (PARTITION BY Customer ORDER BY [Date] DESC) 
    FROM TABLE 
)Q 
WHERE rn = 1 
+0

也改变了ORDER BY的ROW_NUMBER的部分()来'ORDER BY [日期]说明,ROWNUMBER DESC'以确保您获得该日期的最新交易,如果该日期存在多个交易。如果您想为每个客户和商品添加一行,请将PARTITION BY部分更改为“PARTITION BY Customer,Item”。 – BateTech