SQL Server 使用连接比较不同的家庭

ioekq8ef  于 2023-02-03  发布在  其他
关注(0)|答案(1)|浏览(137)

我试图使用Distinct子句比较两个唯一的家庭ID列表,当我试图将由时间戳组成的第三列拉入结果时,问题出现了。
当我在Select语句中只包含两个Household ID列时,结果似乎是有意义的,我得到了两个唯一ID的列表。
下面是该查询:

select distinct e.household_id, a.hhid
FROM [dbo].[exposure] e
left outer join [dbo].[audience] a
on e.household_id = a.hhid

但是,当我只是将"e. imp_ts"列添加到Select语句中时,SQL似乎完全忽略了查询的Distinct部分,并拉入了文件中所有重复的家庭。

select distinct e.household_id, a.hhid, e.imp_ts
FROM [dbo].[exposure] e
left outer join [dbo].[audience] a
on e.household_id = a.hhid

有人能解释一下为什么当我简单地向Select语句添加第三列时查询不起作用吗?
谢谢大家!

wljmcqd8

wljmcqd81#

这并不是说第二个查询“不起作用”,而是要求它提供与第一个查询不同的结果。正如评论中的其他人所指出的,因为imp_ts列包含更细粒度的数据,所以非重复查询无法再返回唯一的家庭ID列表。例如,家庭ID 12345可能包含5条记录,每条记录上都有唯一的时间戳。
为了解决此问题,您有以下几种选择:
1.从查询中删除imp_ts
1.返回最小(最有可能是第一个)时间戳
1.返回最大(很可能是最后一个)时间戳
对于上面的#2和#3,可以将MIN()MAX()GROUP BY一起使用来实现这些结果。下面是使用MIN()的示例:

select e.household_id, a.hhid, MIN(e.imp_ts) AS min_imp_ts
FROM [dbo].[exposure] e
left outer join [dbo].[audience] a
on e.household_id = a.hhid
group by e.household_id, a.hhid

我建议在网上查找GROUP BY示例,以便更好地了解正在发生的事情。

相关问题