with tiaojian as (
select
uid,
login_date,
row_number()over(partition by uid order by login_date asc) as m
from user_login_tb
group by uid,login_date
),tiaojian2 as (
select
uid,
max(diff) as pdiff
from(
select
uid,
login_date,
subdate(login_date,m) as pm,
count(uid)over(partition by uid,subdate(login_date,m) ) as diff
from tiaojian
) as t
group by uid
)
select
t.days_range,
count(distinct uid) as user_num
from(
select
case when pdiff between 2 and 3 then "连续登录2~3天"
when pdiff between 4 and 7 then "连续登录4~7天"
when pdiff<2 then "未连续登录"
else "连续登录大于7天" end as days_range
,uid
from tiaojian2
) as t
group by t.days_range
order by user_num desc,t.days_range desc