sql 现要求统计各用户最长的连续登录天数,间断一天也算作连续,例如:一个用户在1,3,5,6登录,则视为连续6天登录。
分类:SQL
你可以使用SQL语句来统计各用户最长的连续登录天数。假设你有一个名为"login_history"的表,其中包含两列:用户ID(user_id)和登录日期(login_date)。
以下是一种实现方式:
SELECT user_id, MAX(consecutive_days) AS max_consecutive_days
FROM (
SELECT user_id, login_date,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date) -
ROW_NUMBER() OVER (PARTITION BY user_id, DATEADD(day, -1, login_date) ORDER BY login_date) AS consecutive_days
FROM login_history
) AS subquery
GROUP BY user_id;
该SQL语句使用了窗口函数(ROW_NUMBER())和子查询,具体步骤如下:
- 子查询(subquery)计算每个用户在每个登录日期与前一天登录日期的差值,得到一个连续登录的天数。
- 外层查询按用户ID进行分组,并取得连续登录天数的最大值。
请根据你的实际需求,将上述SQL语句中的表名、列名替换为你实际使用的名称。