2012-10-17 36 views
0

我正在使用SQL Server 2008 R2來完成查詢。我有一個銷售表,其中包含一個獨特的銷售ID,客戶ID,銷售日期和銷售額。我正在嘗試創建一個表格,其中包含每個客戶最近的銷售額和銷售額。SQL Server - 最新日期和銷售額欄

| customer_id | most recent sale date | sale amount | 
|  1  |2012-06-11 00:00:00.000|  150  | 
|  2  |2012-01-07 00:00:00.000|  55  | 
|  3  |2012-02-18 00:00:00.000|  117  | 
|  4  |2012-09-02 00:00:00.000|  25  | 

我的前兩列與此查詢:

SELECT DISTINCT customer_id, MAX(sale_date) 
FROM sale 
GROUP BY customer_id 

當我嘗試添加銷售數額,一切我嘗試包括每銷售該客戶,而不僅僅是最近的一。有沒有辦法做到這一點?請記住,這張桌子上有一個獨特的銷售ID,可能有些用處。感謝您的時間。

回答

2

您可以在CTE使用ROW_NUMBERPARTITION BY

WITH CTE AS 
(
    SELECT sale_id,customer_id,sale_date, sale_amount 
     , RN = ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY sale_date DESC) 
    FROM sale 
) 
SELECT sale_id, customer_id, sale_date, sale_amount 
FROM CTE 
WHERE RN = 1 

下面是一個示例小提琴:如果有兩個訂單,在同一天一個客戶http://sqlfiddle.com/#!3/513280/1/0

+0

謝謝!這工作完美。 – kjh23

0
SELECT a.customer_id, a.sale_date, a.sale_amount 
FROM sale a 
     INNER JOIN 
     (
      SELECT customer_id, MAX(sale_date) maxSale 
      FROM  sale 
      GROUP BY customer_id 
     ) b ON a.customer_ID = b.customer_ID AND 
       a.sale_date = b.maxSale 
+0

該解決方案將失敗。它會爲該客戶返回兩條記錄。 –

相關問題