ClickHouse版连续3天登陆SQL

a,2020-02-05,200
a,2020-02-06,300
a,2020-03-04,400
a,2020-03-05,600
b,2020-02-06,300
b,2020-02-08,200
b,2020-02-09,400
b,2020-02-10,600
c,2020-01-31,200
c,2020-02-01,300
a,2020-02-07,200
a,2020-02-08,400
a,2020-02-10,600
b,2020-02-05,200
a,2020-03-01,200
a,2020-03-02,300
a,2020-03-03,200
c,2020-02-02,200
c,2020-02-03,400
c,2020-02-10,600

1.创建MergeTree表
create table shop (
name String,
cdate Date,
money Float64
)engine = MergeTree()
order by (name,cdate);

2.导入数据

clickhouse-client -q ‘insert into tb_shop FORMAT CSV’ < /data/shop.txt

3.select * from shop;
4.
select
name,
groupArray(cdate) as dates
from
shop
group by name;

  1. array join 日期 - 编号
    select
    name,
    dy,
    idx
    from
    (
    select
    name,
    groupArray(cdate) as dates,
    arrayEnumerate(dates) as idxs
    from
    shop
    group by name
    ) array join
    dates as dy ,
    idxs as idx
    order by name;

  2. 日期做差

select
name,
dy,
idx,
subtractDays(dy,idx) sub
from
(
select
name,
groupArray(cdate) as dates,
arrayEnumerate(dates) as idxs
from
shop
group by name
) array join
dates as dy ,
idxs as idx
order by name;

7.分组,聚合
select
name,
sub,
count(1) cnt
from
(
select
name,
dy,
idx,
subtractDays(dy,idx) sub
from
(
select
name,
groupArray(cdate) as dates,
arrayEnumerate(dates) as idxs
from
shop
group by name
) array join
dates as dy ,
idxs as idx
order by name
)
group by name,sub
having cnt >= 3
order by name,cnt desc
limit 1 by name;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值