mysql题解 | 最长连续登录天数(连续)

最长连续登录天数

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


-- 思路
-- 去重,减轻数据量
-- 连续

WITH dist_t AS ( -- 去重,减轻数据量;获取2023年1月1日-2023年1月31日的用户
    SELECT DISTINCT  
        fdate
        ,user_id
    FROM tb_dau
    WHERE fdate BETWEEN '2023-01-01' AND '2023-01-31'
    ORDER BY user_id, fdate 
),
row_t AS (  -- 按用户分区,日期升序;给个序号
    SELECT 
        fdate
        ,user_id
        ,ROW_NUMBER()OVER(PARTITION BY user_id ORDER BY fdate) AS r
    FROM dist_t
),
sub_t AS (  -- 日期 减 序号;用于在之后的SQL语句中,判断连续
    SELECT
        fdate
        ,user_id
        ,r
        ,DAY(fdate) - r AS sub
    FROM row_t
),
days_t AS (  -- 同时按用户,日期分组;如果(日期-ROW_NUMBER产生的序号)得到的值相同,就是连续
    SELECT 
        user_id
        ,COUNT(sub) AS days
    FROM sub_t
    GROUP BY user_id, sub 
)

SELECT
    user_id
    ,MAX(days) AS max_consec_days  -- 连续 最长的天
FROM days_t
GROUP BY user_id
;

END

全部评论

相关推荐

Java抽象带篮子:简历怎么写可以看看我发的帖子,你的第一个是实习经历吗?那怎么写的是你的第一个练手项目呢?简历写的怎么样直接投小厂面试一下就知道了
没有实习经历,还有机会进...
点赞 评论 收藏
分享
码农索隆:这种hr,建议全中国推广
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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