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