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

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 18:22
投了几百份简历,专业和方向完全对口,都已读不回。尝试改了一下学校,果然有奇效。
steelhead:这不是很正常嘛,BOSS好的是即便是你学院本可能都会和聊几句,牛客上学院本机会很少了
点赞 评论 收藏
分享
07-01 13:37
门头沟学院 Java
steelhead:不是你的问题,这是社会的问题。
点赞 评论 收藏
分享
码农索隆:这种hr,建议全中国推广
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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