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
查看30道真题和解析