我有一张像下面这样的桌子
event_date id
---------- ---
2015-11-18 x1
2015-11-18 x2
2015-11-18 x3
2015-11-18 x4
2015-11-18 x5
2015-11-19 x1
2015-11-19 x2
2015-11-19 y1
2015-11-19 y2
2015-11-19 y3
2015-11-20 x1
2015-11-20 y1
2015-11-20 z1
2015-11-20 z2
问题:如何获取每个日期的唯一id计数(这样我们只获取以前记录中未显示的id计数)?像这样的:
event_date count(id)
----------- ---------
2015-11-18 5
2015-11-19 3
2015-11-20 2
无论是在同一日期组内还是在其他日期组内,每个ID都只应计数一次。
最佳答案
下面是一个答案,虽然我不确定是否喜欢:
select t.event_date,
count(1)
from (
-- Record first occurrence of each id along with the earliest date occurred
select id,
min(event_date) as event_date
from
mytable
group by id
) t
group by t.event_date;
我知道这是有效的,因为我用你的数据测试得到了你想要的结果。
这实际上适用于此数据,但如果您有一个仅包含重复ID的日期组,例如,如果在行之间,您还有一行
('2016-01-01', 'z2')
,则不会显示该2016-01-01
的任何记录,因为z2
是重复的。如果需要返回结果中的行:2016年01月01日
然后,您必须使用左连接和GROUP BY。
sqlfiddle这里
关于sql - 如何在SQL中获得唯一值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36944720/