【发布时间】:2016-08-27 08:36:15
【问题描述】:
我正在尝试检索与名称关联的最新地址(因为每个名称通常有多个地址)。我在我的联接中创建了以下带有子查询的查询。我可以根据需要为每一方撤回一个地址,但地址/城市并不总是匹配,或者返回的地址不是最近的地址(根据相关日期)。我用 MAX 写错了子查询吗?有没有办法确保正确的城市和正确的地址?
select
[demographics].[DOB],
Address1,
Address2,
City,
State,
Zip
from [demographics]
left join (select
[address].[demographic_ID],
max([address].[address1]) as Address1,
max([address].[address2]) as Address2,
max([address].[city]) as City,
max([states].[state_title]) as 'State',
max([dbo].[address].[zip]) as Zip
from [address]
inner join [states] on [address].[state_ID] = [states].[state_ID]
group by [address].[demographic_ID]) as AddressSub
on [demographics].[demographic_ID] = AddressSub.[demographic_ID];
【问题讨论】:
-
是的,你写错了。考虑一下如何使用 TOP 1 而不是 MAX。
-
我认为使用
Row_Number over (partition by Address.PK order by Date? ID? [what field determines most recent] desc)之类的分析会更容易,然后将其限制为 row_number 1。 -
是的,顺便说一句,您需要有一列来确定哪个地址是最新的,我看不到您的查询中使用了该列。
-
谢谢你,标签!这样可以将我的地址保持在一起,然后我按“[address1] desc”命令将其与每个日期的最新地址一起提取。
标签: sql tsql join subquery max