我有一个用户活动表,我正试图获得过去28天每天所有不同用户的计数。类似于例如7/7将具有7/7和6/9的不同计数,7/6将具有7/6到6/8的不同计数
我不能每天只获取不同的用户并将其相加,因为在整个范围内,不同的用户数将是双倍的。一天只使用这个数字很容易,但我每天都需要它,我们正在收集数据
uniqStates可以求和
create table u (date Date, uid Int64) Engine=Memory;
insert into u select toDate('2021-01-01') + number, arrayJoin( range(number, number*2+5 ) ) from numbers(31);
select x.1 date, uniqMerge(x.2) uniq_per_date, uniqMerge(arrayJoin(y)) uniq_from_beginning from (select groupArray( (date, s) ) xx, arrayMap( i-> arraySlice(xx.2, 1, i), range(length(xx))) yy from (select date, uniqState(uid) s from u group by date order by date)) array join xx as x, yy as y group by date ;
┌───────date─┬─uniq_per_date─┬─uniq_from_beginning─┐
│ 2021-01-02 │ 6 │ 5 │
│ 2021-01-03 │ 7 │ 7 │
│ 2021-01-04 │ 8 │ 9 │
│ 2021-01-05 │ 9 │ 11 │
│ 2021-01-06 │ 10 │ 13 │
│ 2021-01-07 │ 11 │ 15 │
│ 2021-01-08 │ 12 │ 17 │
│ 2021-01-09 │ 13 │ 19 │
│ 2021-01-10 │ 14 │ 21 │
│ 2021-01-11 │ 15 │ 23 │
│ 2021-01-12 │ 16 │ 25 │