题解 | 最长连续登录天数

最长连续登录天数

https://www.nowcoder.com/practice/cb8bc687046e4d32ad38de62c48ad79b

select user_id,
       max(days) as max_consec_days
from(
select user_id,
        datediff(max(fdate),min(fdate))+1 as days
from
(
select 
    user_id,
    fdate,
    row_number() over(partition by user_id order by fdate) as num,
    date_sub(fdate,interval row_number() over(partition by user_id order by fdate) day) as cnt
from tb_dau
where fdate between '2023-01-01' and '2023-01-31') a
group by user_id,cnt) b
group by user_id;

思路:按照连续登陆进行分组,然后统计每组中连续登陆的天数,最后在外层取最大值。

连续如何判定,使用窗口函数,对用户进行分组,按照时间排序,并给出序号,如果是连续登陆,那么该日期与序号的差值应该是相同的,可以以二者差值作为分组依据。

连续登陆天数如何计算,在同一分组中,最大日期和最小日期的差加1即为连续登陆天数,可以用datediff函数求出。

取最大的连续登陆天数,使用max函数求出最大连续登陆天数即可。

全部评论
datediff(max(fdate),min(fdate))+1 as days这里用max(num)-min(num)+1就可以,这种方法更妙,当然你的好理解
点赞 回复 分享
发布于 07-11 20:02 湖南

相关推荐

评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务