在Microsoft SQL数据库上,我正在寻找最新的salesdate和customer pr项目。 如果两个顾客购买了相同的商品,我只想要一个顾客。
在我的查询中,每个项目只应该出现一次。
以下是我的数据示例:
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功能,但我不能让它工作。
答案 0 :(得分: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