假设我在 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
但是,由于客户可能有多个地址,该客户是否只会计入最新地址记录的州?
附注以上纯粹是一个示例场景,用于轻松解释我试图实现的连接,并不反射(reflect)实际的系统设计。
最佳答案
试试这个:
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
关于sql - 左连接中的最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/725153/