左結合の最新レコード 質問する

左結合の最新レコード 質問する

SqlServer に次の 3 つのテーブルがあるとします。

Customer (CustomerID, FirstName, LastName)
Address (AddressID, CustomerID, Line1, City, State)
Product (ProductID, CustomerID, Description)

顧客は複数の配送先と複数の製品を持つことができます。

私がやりたいのは、最新の住所レコードによって決定される各州の顧客数をリストすることです。たとえば、「各州で最後に製品を受け取った顧客の数はどれくらいか?」などです。したがって、顧客の以前の住所レコードには興味がなく、最新のもの (AddressID によって決定) のみに興味があります。

State | Number of Customers
--------------------------
CA    | 32
GA    | 12
TX    | 0
OH    | 18

通常は次のようなことをします:

SELECT a.State, count(c.CustomerID)
FROM Product p
INNER JOIN Customer c ON c.CustomerID = p.CustomerID
LEFT JOIN Address a ON a.CustomerID = c.CustomerID
WHERE p.ProductID = 101
GROUP BY a.State

ただし、顧客には複数の住所がある場合があるため、顧客は最新の住所レコードの州でのみカウントされますか?

PS 上記は、私が実現しようとしている結合を簡単に説明するための単なる例のシナリオであり、実際のシステム設計を反映するものではありません。

ベストアンサー1

これを試して:

SELECT a.State, count(c.CustomerID)
FROM Product p
INNER JOIN Customer c ON c.CustomerID = p.CustomerID
LEFT JOIN Address a ON a.CustomerID = c.CustomerID 
      AND a.AddressID = 
        (
           SELECT MAX(AddressID) 
           FROM Address z 
           WHERE z.CustomerID = a.CustomerID
        )
WHERE p.ProductID = 101
GROUP BY a.State

おすすめ記事