题解 | 最长连续登录天数(和官方解法不同)
with a as( select user_id,fdate, cast(diff as SIGNED) - cast(sign1 as SIGNED) as sign from( select user_id,fdate, datediff(fdate,'2023-01-01') diff, row_number() over(partition by user_id order by fdate ) as sign1 from tb_dau where fdate between '2023-01-01' and '2023-01-31') aa ) select user_id,max(cnt) max_consec_days from ( select user_id, sign,count(1) cnt from a group by sign,user_id ) bb group by user_id
问题先转化为最大连续登录 -》连续登录
- 【官方题解】发生连续登录这几天,共性是有一样的起点,既都拥有连续开始的那一天,
- 【我的思路】
日子在向前推进,同时登陆的日期也随着推进
01/01与这天的距离-rownum(本月第几个登陆日期)= 登录天和时间天的步数差。若连续几天步差相等则这几天为连续登录
本月第四天-本月第1个登录日期 = 3
本月第五天-本月第2个登录日期 = 3
本月第10天-本月第3个登录日期 = 3
本月第11天-本月第4个登录日期 = 7
本月第12天-本月第5个登录日期 = 7
原理:
用户登录日期的是第几次是随记录一条一条增加的,但是用户的登录日期,若有中断则会跳过。
今天是当月的第几天 第x次登录
+1 +1
+0