题解 | SQLW2 最长连续登录天数

WITH t1 AS (
    SELECT fdate,
           user_id
    FROM tb_dau
    WHERE fdate BETWEEN '2023-01-01' AND '2023-01-31'
    GROUP BY fdate, user_id
),
t2 AS (
    SELECT fdate,
           user_id,
           row_number()
               over (PARTITION BY user_id
                   ORDER BY fdate ASC) AS ranking
    FROM t1
),
t3 AS (
    SELECT
        user_id,
        DATE_ADD(fdate, INTERVAL - ranking DAY ) AS after_date
    FROM t2
),
t4 AS (
    SELECT
        user_id,
        after_date,
        count(after_date) AS max_consec_days
    FROM t3
    GROUP BY user_id, after_date
),
t5 AS (
    SELECT
        user_id,
        max_consec_days,
        RANK() over (PARTITION BY user_id ORDER BY max_consec_days DESC) AS ranking
    FROM t4
),
t6 AS (
    SELECT user_id,
           max_consec_days
    FROM t5
    WHERE ranking = 1
    GROUP BY user_id, max_consec_days
    ORDER BY user_id ASC 
)
SELECT * FROM t6;

# 这道题是求用户最高连续登录天数,这里是以用户作为事件驱动,因此有多少个用户,就有多少行结果!

全部评论

相关推荐

07-02 13:50
闽江学院 Java
点赞 评论 收藏
分享
06-23 11:28
门头沟学院 Java
牛客91966197...:也有可能是点拒绝的时候自动弹的话术
点赞 评论 收藏
分享
星辰再现:裁员给校招生腾地方
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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