SQL Server - 最新的日期和销售额列

时间:2012-10-17 15:50:57

标签: sql sql-server tsql sql-server-2008-r2

我正在使用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可能有一些用处。谢谢你的时间。

3 个答案:

答案 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)));