题解 | 最长连续登录天数(和官方解法不同)

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                  

全部评论

相关推荐

01-15 14:59
门头沟学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务