Представьте, что у меня есть следующие 3 таблицы в SqlServer:
Customer (CustomerID, FirstName, LastName)
Address (AddressID, CustomerID, Line1, City, State)
Product (ProductID, CustomerID, Description)
Клиент может иметь несколько адресов доставки и mulitple продуктов.
То, что я хотел бы сделать, это перечислить количество клиентов для каждого государства, где государство определяется последним адрес записи. Такие, как "Сколько клиентов в последний раз получили продукт в каждом государстве?". Поэтому меня не интересуют предыдущие адресные записи для Клиента, только самые последние (определяемые 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
Однако, как клиент может иметь несколько адресов будет клиент будет рассчитываться только в состоянии последней записи адреса?
П.С. Выше является чисто примером сценария, чтобы легко объяснить соединения я пытаюсь достичь и не отражает фактический дизайн системы.