4

最終的に顧客ごとに1行を返したいビューがあります。

現在、次のように選択します。

SELECT 
    Customerid,
    MAX(purchasedate) AS purchasedate,
    paymenttype,
    delivery,
    amount,
    discountrate 
FROM    
    Customer 
GROUP BY
    Customerid,
    paymenttype,
    delivery,
    amount,
    discountrate

MAX(購入日)が機能することを望んでいましたが、グループ化を行うと、割引率が発生したり、NULLが発生したり、支払いタイプが顧客ごとに異なる可能性があるため、グループ化が壊れます。とにかく、顧客が行った最後の購入を表示するだけですか?

4

1 に答える 1

11

SQL Server 2008 r2Windows機能をサポートしているため、

SELECT  Customerid,
        purchasedate,
        paymenttype,
        delivery,
        amount,
        discountrate
FROM    
    (
        SELECT  Customerid,
                purchasedate,
                paymenttype,
                delivery,
                amount,
                discountrate,
                ROW_NUMBER() OVER (Partition By CustomerID
                                    ORDER BY purchasedate DESC) rn
        FROM    Customer
    ) derivedTable
WHERE   derivedTable.rn = 1

または使用してCommon Table Expression

WITH derivedTable
AS
(
    SELECT  Customerid,
            purchasedate,
            paymenttype,
            delivery,
            amount,
            discountrate,
            ROW_NUMBER() OVER (Partition By CustomerID
                                ORDER BY purchasedate DESC) rn
    FROM    Customer
)
SELECT  Customerid,
        purchasedate,
        paymenttype,
        delivery,
        amount,
        discountrate
FROM    derivedTable
WHERE   derivedTable.rn = 1

または、他の DBMS で動作するサブクエリとの結合を使用して

SELECT  a.*
FROM    Customer a
        INNER JOIN
        (
            SELECT  CustomerID, MAX(purchasedate) maxDate
            FROM    Customer
            GROUP BY CustomerID
        ) b ON  a.CustomerID = b.CustomerID AND
                a.purchasedate = b.maxDate
于 2012-12-12T15:56:52.657 に答える