sql计算某个⽇期区间⽤户连续登陆最⼤天数
例:测试数据如下表(user_login_table)
注:对于⼯作⽇(上周五和下周⼀也界定为连续),则⽅法⼆适⽤
实现思路⼀:
1、使⽤开窗函数row_number() 对每个user_id 的登陆⽇期进⾏排序,得到排名rn
2、然后⽤login_date减去排名rn,得到⼀个新的⽇期new_date字段,⽐如,‘2021-10-01’减去1得到‘2021-09-30’,‘2021-10-02’减去2得到‘2021-09-30’......,减完之后得到的⽇期相同,则说明登陆⽇期连续
3、之后按user_id和new_date,进⾏计数,得到login_days
4、最后按user_id分组,取每个user_id对应login_days的最⼤值,即为该user_id的最⼤登陆天数max_login_days
SQL:
select user_id,max(login_days) max_login_days
from (select user_id,new_date,count(*) login_days
from (select user_id,
login_date,
row_number() over(partition by user_id order by login_date) rn,
login_date - row_number() over(partition by user_id order by login_date) new_date
from user_login_table)a
group by user_id, new_date)b
group by user_id;
实现思路⼆:
1、⾃⼰创建⼀个⽇期表(包含分析期间的所有⽇期),表名(dic_date_table)
2、使⽤开窗函数row_number() 对每个user_id 的登陆⽇期进⾏排序,得到排名rn
3、使⽤开窗函数row_number()对⽇期表中的⽇期(dic_date)进⾏排序,得到rn_1
4、将步骤2和3得到的结果,通过⽇期字段关联,然后⽤rn_1 - rn得到 num
5、之后按user_id和num,进⾏计数,得到login_days
6、最后按user_id分组,取每个user_id对应login_days的最⼤值,即为该user_id的最⼤登陆天数max_login_days
html实现用户注册登录代码 将上⾯两表关联(login_date = dic_date)得到以下结果:
SQL:
select T.user_id, max(login_days) max_login_days
from (select t.user_id, t.num, count(*) login_days
from (select a.user_id, b.rn_1 - a.rn num
from (select user_id,
login_date,
row_number() over(partition by user_id order by login_date) rn
from user_login_table)a
left join (select dic_date,
row_number() over(order by dic_date) rn_1
from dic_date_table)b
on a.login_date = b.dic_date)t
group by t.user_id, t.num)T
group by T.user_id;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论