WITH t AS(
SELECT fdate, user_id,
DENSE_RANK() over (PARTITION BY user_id ORDER BY fdate) AS rk
FROM tb_dau
WHERE YEAR(fdate) = 2023 AND MONTH(fdate) = 1
),
t1 AS(
SELECT t.*,
DATE_SUB(fdate, INTERVAL rk DAY) AS diff_day
FROM t
),
t2 AS (
SELECT user_id, COUNT(diff_day) AS consec_days
FROM t1
GROUP BY user_id, diff_day
)
SELECT user_id, MAX(consec_days) AS max_consec_days
FROM t2
GROUP BY user_id;

京公网安备 11010502036488号