题解 | 最长连续登录天数
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
: 年