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