题解 | 最长连续登录天数
WITH ranked_data AS (
SELECT
user_id,
fdate,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY fdate) AS rn
FROM tb_dau
WHERE fdate BETWEEN '2023-01-01' AND '2023-01-31'
),
grouped_data AS (
SELECT
user_id,
fdate,
DATE_SUB(fdate, INTERVAL rn DAY) AS grp
FROM ranked_data
),
consecutive_days AS (
SELECT
user_id,
COUNT(*) AS consec_days
FROM grouped_data
GROUP BY user_id, grp
)
SELECT
user_id,
MAX(consec_days) AS max_consec_days
FROM consecutive_days
GROUP BY user_id;
DATE_SUB 是 MySQL 中一个用于日期计算的函数,它用于从给定的日期中减去指定的时间间隔。其语法结构如下:
sql复制编辑DATE_SUB(date, INTERVAL expression unit)
参数说明
date: 基础日期,可以是日期型字段或日期常量。INTERVAL expression unit:expression 是要减去的时间长度,可以是数字。unit 是时间单位,例如 DAY、MONTH、YEAR 等。
常见单位
以下是 INTERVAL 支持的常见单位:
SECOND: 秒MINUTE: 分钟HOUR: 小时DAY: 天MONTH: 月YEAR: 年
