0

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

4

3 回答 3

2

您可以在 CTE中使用ROW_NUMBERwith :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

于 2012-10-17T15:55:11.927 回答
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
于 2012-10-17T15:53:34.750 回答
-1

SELECT CUSTOMER_ID,SALE_AMOUNT,SALEDATE FROM SALED WHERE SALEDATE =(SELECT MAX(SALEDATE) FROM SALE);

于 2020-08-18T05:51:16.863 回答