问题:
- 最大连续登录天数
- 当前连续登录天数
- 最大连续未登录天数
- 连续登陆3天用户(三种方法)
- 选出连续座位的编号
前三个问题所用数据:
原数据表:user_active表
表字段:用户、新增日期、活跃日期
sql查询:
1. 最大连续登录天数
关键点:diff-rank,diff表示每用户每活跃日期距新增日期间隔天数,rank表示每用户按活跃日期生序排的序号,两者相减可理解为计算用户是否连续活跃的衡量指标,如果连续活跃则相减值value应该相等。
select name,max(activedays) as 最大连续登录天数
from
(
select name,value,count(1) as activedays
from
(
select name,active_date,row_number() over(partition by name order by active_date) as rank,datediff(day,install_date,active_date) as diff,diff-rank as value
from user_active
) group by 1,2
) group by 1
order by 1
查询结果:
2. 当前连续登录天数
关键点:同上
with active as
(
select name,active_date,row_number