我有一张像下面这样的桌子

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/

10-16 15:03