一、数据如下
二、答案如下
select
a.id,
a.name,
a.montha,
count(a.newline)
from(
select
a.id,
a.name,
a.montha,
a.daya-a.rn as newline -- 3、子查询中rn是排名递增1 每签到一天也是递增1 所以直接用签到数减排行
from(
select
a.id,
a.name,
a.montha,
a.daya,
row_number() over(partition by a.id,a.montha order by a.daya) rn -- 2、id_month作为维度 为了每个人每个月登陆几次
from(
select
a.id,
a.name,
a.montha,
collect_list(a.daya)[0] as daya
from( --1、 先做好子表
select
id,
name,
day(from_unixtime(unix_timestamp(date,'M/d/yyyy'))) daya,
month(from_unixtime(unix_timestamp(date,'M/d/yyyy'))) as montha
from login_zz
)as a
group by a.id,a.name,a.montha,a.daya
)as a
)as a
)a
group by
a.id,
a.name,
a.montha
三、思路:
按照月分组,对天去重,然后rownumber()对id和月分组,对day排序,每个字段用天减去序号,结果相同的就是连续登陆的