-- 使用窗口函数解决连续求解问题
SELECT
user_id
FROM
(SELECT *,
-- 若两行记录登录时间与序号相减是是相同值,则证明这两行时连续登录
DATE_SUB(DATE(log_time), INTERVAL ranking DAY) AS dt
FROM
(SELECT
*,
-- 首先根据用户分组,对用户登录时间进行排序
ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY log_time) AS ranking
FROM login_tb
JOIN register_tb USING(user_id)) AS t1) AS t2
GROUP BY user_id, dt
HAVING COUNT(dt)>=3
ORDER BY user_id;

京公网安备 11010502036488号