我具有所有订户用户的下表。我希望按月分配唯一的订阅者用户组,但是如果用户已经订阅,则不应在计数中重复。
ID | USER | CREATED DATE
1 | 1 | 2019-10-16
2 | 2 | 2019-10-18
3 | 3 | 2019-12-06
4 | 2 | 2020-01-01 (* This is repeated so should not be count in 01)
5 | 4 | 2020-01-05
6 | 5 | 2020-01-11
7 | 1 | 2020-02-14 (* This is repeated so should not be count in 02)
8 | 2 | 2020-03-06 (* This is repeated so should not be count in 03)
9 | 5 | 2020-03-15 (* This is repeated so should not be count in 03)
我的预期输出应为以下。用户总数为5,所以总数必须为5。
TOTAL | MONTH
2 | 10
1 | 12
2 | 01
0 | 02
0 | 03
使用group by
获得第一个月,然后再次汇总:
select year(min_cd), month(min_cd), count(*)
from (select user, min(created_date) as min_cd
from t
group by user
) u
group by year(min_cd), month(min_cd);
这不包括0
值,但它们似乎有些武断。
如果您确实希望它们与数据一起使用,那么一种方法是窗口函数和条件聚合:
select year(min_cd), month(min_cd),
sum( min_cd = created_date )
from (select user, min(created_date) over (partition by user) as min_cd
from t
) u
group by year(min_cd), month(min_cd);