问题描述
我在使用嵌套子查询查询数据集时遇到了一些麻烦,我认为这很简单。
我有一张客户及其地址dbo.PERSON_ADDRESSES
的表,以及与客户dbo.TRANSACT_CUSTOMERS
的交易。随着时间的推移,客户在dbo.PERSON_ADDRESSES
表中存储多个地址是很常见的。我只是想将dbo.TRANSACT_CUSOMTERS
表中的最新事务用于dbo.PERSON_ADDRESSES
表中的最新地址的表。
当我独立运行内部子查询时,它运行良好:它显示了我所设想的每个客户的最近一笔交易。但是,由于某种原因,当我运行整个查询时,每个客户获得的地址很多。我不明白为什么。
SELECT MaxTransaction.PERSON_ID,Addr.*
FROM dbo.PERSON_ADDRESSES AS Addr
INNER JOIN
(SELECT PERSON_ID,Max(TRANSACTION_ID) AS MaxTID
FROM dbo.TRANSACTION_CUSTOMERS
GROUP BY PERSON_ID) AS MaxTransaction
ON MaxTransaction.MaxTID = Addr.TRANSACTION_ID
解决方法
我猜一个交易可以有多个客户。要获得每人一行,请使用其他JOIN
条件:
SELECT maxp.PERSON_ID,pa.*
FROM dbo.PERSON_ADDRESSES pa JOIN
(SELECT PERSON_ID,Max(TRANSACTION_ID) AS MaxTID
FROM dbo.TRANSACTION_CUSTOMERS
GROUP BY PERSON_ID
) maxp
ON maxp.person_id = pa.person_id AND
maxp.MaxTID = pa.TRANSACTION_ID;