我有一张类似于此的表
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
这个最终查询也应该是基于集合的问题。没有循环等。
答案 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;