gpt4 book ai didi

sql - 左连接中的最新记录

转载 作者:行者123 更新时间:2023-12-01 17:57:00 25 4
gpt4 key购买 nike

假设我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com