消除重复值的不同计数

时间:2017-07-14 08:24:47

标签: sql

我有一张类似于此的表

AA  20170101
BB  20170101
CC  20170101
AA  20170102
CC  20170102
DD  20170102
BB  20170103
EE  20170103`

我需要获得每天不同值的计数。棘手的部分是你不能计算不同日期的相同值。例如:AA应该只计算一次所有日子。最终结果应与此类似。

3 20170101--> (this is AA, BB, CC)
1 20170102--> (this is DD)
1 20170103--> (this is EE)`

当我在下面尝试时,它给我不正确的结果,因为相同的值每天计算不止一次。

select count(distinct(name)),date
from testcount
group by date

这个最终查询也应该是基于集合的问题。没有循环等。

2 个答案:

答案 0 :(得分:3)

您需要嵌套聚合:

select first_date, count(*) 
from 
 (
   select name, 
      min(date) as first_date -- find the first date for each name, only count once
   from testcount 
   group by name
 ) as d
group by first_date

答案 1 :(得分:2)

您需要做两个聚合,第一个是获取每个名称的第一个日期,然后您可以按名称计算日期:

SELECT  Date, COUNT(Name) AS Names
FROM    (   SELECT  Name, MIN(Date) AS Date
            FROM    T
            GROUP BY Name
        ) AS t
GROUP BY Date;