题解 | 最长连续登录天数

最长连续登录天数

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

-- 逻辑拆解:这种题目的核心解法分为两步,1:识别连续登录天数,2:求出用户最长的登录天数
-- 对于1,我们可以利用窗口函数,增加一列按日期排序的rank列;对于2,我们可以对日期减去rank列的结果进行分组,计数,求出最大值。(核心逻辑是:如果用户是连续登录,那么其日期-rank列的结果一定相同)
With ranked AS(
    SELECT
        a.user_id,
        a.min_date,
        DENSE_RANK() OVER(partition by a.user_id order by a.min_date) ranking
    FROM(
        SELECT
            user_id,
            DATE(fdate),
            MIN(fdate) min_date
        FROM tb_dau
        WHERE fdate BETWEEN '2023-01-01' AND '2023-01-31'
        GROUP BY user_id,DATE(fdate) -- 这一步的目的是为了消除一个用户某一天多次登录
    ) a
),
grouped AS(
    SELECT
        t1.user_id,
        t1.diff,
        COUNT(t1.diff) cnt_consec_days
    FROM(
        SELECT
            user_id,
            DATE_SUB(min_date,INTERVAL ranking DAY) diff -- 这个地方可以有效避免跨越的情况,虽然本题不存在
        FROM ranked
    ) t1
    GROUP BY t1.user_id,t1.diff
)
SELECT 
    user_id,
    MAX(cnt_consec_days) max_consec_days
FROM grouped
GROUP BY user_id


全部评论

相关推荐

故事和酒66:小米现在校招很多都是在高校搞小米训练营,然后直接挑人,大四就去实习,所以实际上校招总名额是变少了的。同学211本无经验经过两周培训直接签了
秋招,不懂就问
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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