题解 | 最长连续登录天数

最长连续登录天数

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

with t1 as( #第一步,先按date排序,注意用dense_rank可以避免出现同一天多次登陆情况
select
    user_id,
    fdate,
    dense_rank()over(partition by user_id order by fdate) drn
from tb_dau
where fdate between '2023-01-01' and '2023-12-31'
),
t2 as(#第二步,创建辅助列diff,用登陆日期减去第一步得到的排名,如果连续登陆,则diff相同
select 
    user_id,
    fdate,
    fdate - interval drn day diff
from t1
),
t3 as( #第三步计算每个用户每次连续登陆的天数,注意count里要用distinct,因为第一步用的dense_rank
select 
    user_id,
    count(distinct fdate) cnt
from t2
group by user_id, diff
)
#第四步,求最终结果,每个用户最大的连续登陆次数。
select 
    user_id,
    max(cnt) max_consec_days
from t3
group by user_id


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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