我试图使用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语句添加第三列时查询不起作用吗?
谢谢大家!
1条答案
按热度按时间wljmcqd81#
这并不是说第二个查询“不起作用”,而是要求它提供与第一个查询不同的结果。正如评论中的其他人所指出的,因为
imp_ts
列包含更细粒度的数据,所以非重复查询无法再返回唯一的家庭ID列表。例如,家庭ID 12345可能包含5条记录,每条记录上都有唯一的时间戳。为了解决此问题,您有以下几种选择:
1.从查询中删除
imp_ts
。1.返回最小(最有可能是第一个)时间戳
1.返回最大(很可能是最后一个)时间戳
对于上面的#2和#3,可以将
MIN()
或MAX()
与GROUP BY
一起使用来实现这些结果。下面是使用MIN()
的示例:我建议在网上查找GROUP BY示例,以便更好地了解正在发生的事情。