【发布时间】:2010-10-18 00:44:48
【问题描述】:
假设我在 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
但是,由于客户可能有多个地址,客户是否只计入最近地址记录的状态?
附:以上纯粹是一个示例场景,用于轻松解释我试图实现的连接,并不反映实际的系统设计。
【问题讨论】:
标签: sql sql-server sql-server-2005