Представьте, что у меня есть следующие 3 таблицы в SqlServer:
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
Однако, поскольку у Клиента может быть несколько Адресов, он будет учитываться только в состоянии самой последней записи адреса?
P.S. Выше приведен пример сценария, который легко объясняет соединения, которые я пытаюсь достичь, и не отражает фактический дизайн системы.