我正在使用SQL Server 2008 R2来完成查询。我有一张销售表,其中包含唯一的销售ID,客户ID,销售日期和销售金额。我正在尝试创建一个表格,其中包含每位客户的最新销售额以及该销售额。
| 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可能有一些用处。谢谢你的时间。
答案 0 :(得分:2)
您可以在CTE中使用ROW_NUMBER
PARTITION 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
答案 1 :(得分: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
答案 2 :(得分:-1)
SELECT CUSTOMER_ID,SALE_AMOUNT,SALEDATE从SALESATE出售=((从销售中选择MAX(SALEDATE)));