题解 | 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;

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

全部评论

相关推荐

程序员小白条:你不是有一段实习了吗,现在找中大厂实习?过段时间要秋招了
我的简历长这样
点赞 评论 收藏
分享
自学java狠狠赚一...:骗你点star的,港卵公司,记得把star收回去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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