は、私がのSQLServerに以下の3つのテーブルを持っている想像して参加:最近の記録は
Customer (CustomerID, FirstName, LastName)
Address (AddressID, CustomerID, Line1, City, State)
Product (ProductID, CustomerID, Description)
顧客が複数の配信アドレスとmulitple製品を持つことができます。
私がしたいのは、最新のアドレスレコードによって州が決定された各州の顧客数をリストすることです。 「どの州の顧客が最後に商品を受け取ったか?したがって、私は顧客の以前の住所記録には関心がなく、最も最近のもの(AddressIDによって決定されたもの)のみに興味があります。お客様は、お客様のみが最新のアドレスレコードの状態でカウントされます複数のアドレスを有することができるよう、しかし
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
:
State | Number of Customers
--------------------------
CA | 32
GA | 12
TX | 0
OH | 18
私は普通のような何かをしますか?
P.S.上記は、私が達成しようとしている結合を簡単に説明するための例示的なシナリオであり、実際のシステム設計を反映していません。
SELECT state, count(customer_id)
FROM (
SELECT
p.customer_id
, (SELECT TOP 1 State FROM Address WHERE Address.CustomerID = p.CustomerID ORDER BY Address.ID DESC) state
FROM Product p
WHERE p.ProductID = 101)
GROUP BY state
私が探していたもの、多くのおかげです。 –
素晴らしい!今、なぜ私はこれを考えなかったのですか? –
これはきれいだった。あなたへの誇り。 –