要查询连续天数,您可以使用MySQL中的日期函数和子查询来执行此操作。以下是一个示例查询来获取最近N天内每个用户的连续登录天数。
SELECT user_id, MAX(continuous_days) AS max_continuous_days
FROM (
SELECT
user_id,
COUNT(*) AS continuous_days
FROM (
SELECT
t1.user_id,
t1.login_date,
DATE_SUB(t1.login_date, INTERVAL @rank := @rank + 1 DAY) AS prev_date
FROM (SELECT @rank:=0) r, user_login t1
LEFT JOIN user_login t2 ON t1.user_id = t2.user_id AND t1.login_date = DATE_ADD(t2.login_date, INTERVAL 1 DAY)
WHERE t1.login_date BETWEEN DATE_SUB(CURDATE(), INTERVAL N DAY) AND CURDATE()
AND t2.user_id IS NULL
ORDER BY t1.user_id, t1.login_date DESC
) AS consecutive_logins
GROUP BY user_id, DATEDIFF(login_date, prev_date)
) AS continuous_days_table
GROUP BY user_id;
在这个查询中,我们首先在内部查询中建立了由用户ID,登录日期和前一天日期组成的表。我们通过LEFT JOIN操作来检查当前的登录日期是否与前一天日期相差一天,如果不是,则表示该用户的连续登录序列已经断开。接下来,我们分组计算每个用户的连续登录天数,并在外部查询中找到每个用户的最大连续登录天数。
请注意,您需要将“N”值替换为您要查询的天数范围。此外,当使用DATE_SUB和DATE_ADD函数时,请确保将日期按正确的格式传递给它们。




