2014-03-05 110 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