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      |

このクエリには最初の 2 つの列があります。

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

売上高を追加しようとすると、最新の売上だけでなく、その顧客のすべての売上が含まれます。これを行う方法はありますか?このテーブルには、役立つ可能性のある一意の販売 ID があることに注意してください。お時間をいただきありがとうございます。

4

3 に答える 3

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

于 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 に答える