祝您新年快乐SO!
问题
我正在编写一个存储过程,它接受一组用户ID,并应该返回每个用户ID的1条记录,其中包含:
User
表中的用户详细信息(名字、姓氏等)Address
表中最新修改的地址记录。如果没有Address
记录,则在地址字段(Address
,Postcode
等)中返回NULL
Country
表中的国家详细信息(地区等)
现在我有以下内容,正确地返回了无地址详情的NULL(屏幕截图中的最后一条记录),但对于具有多个地址记录的用户ID,我返回了多条记录而不是最新修改的地址记录:
SELECT
U.Id, U.FirstName, U.Surname, U.Email, U.DateOfBirth,
AD.AddressLine1, AD.AddressLine2, AD.AddressLine3,
AD.PostCode, AD.Nickname, AD.Phone, AD.Modified,
CNT.Name, CNT.Code,
a.MaxDate
FROM
@TableVariable AS List
LEFT JOIN
dbo.Users AS U ON List.Id = U.Id
LEFT JOIN
dbo.Addresses AS AD ON U.Id = AD.User_Id
LEFT JOIN
(SELECT
JA.User_Id, MAX(CONVERT(DATE,JA.Modified,10)) AS MaxDate
FROM dbo.Addresses AS JA
GROUP BY JA.User_Id) A ON (AD.User_Id = A.User_Id AND CONVERT(DATE,AD.Modified,10) = A.MaxDate)
LEFT JOIN
dbo.Countries AS CNT ON AD.Country_Id = CNT.Id
ORDER BY
AD.Modified DESC
以下是运行上述代码后的结果集。您可以看到,我已经成功地返回了一个没有地址的用户记录(最后一条记录),但是在2108的情况下,我得到了3条记录,而我只想要1条记录,其中包括最近修改的地址(AD.Modified)。
我正在使用SQL Server 2008。