如何解决我如何按范围分组,或有条件地从查询结果中选择
我有一个用户活动表,我正在尝试计算过去 28 天内每天所有不同用户的数量。就像例如 7/7 会有不同的计数 7/7 和 6/9 和 7/6 会有不同的计数 7/6 到 6/8
我不能只是每天获取不同的用户并将其相加,因为在整个范围内,不同的用户计数会重复计算。只需要这个数字 1 天就足够容易了,但我每天都需要它来收集数据
解决方法
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 │
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。