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