-- 逻辑拆解:本质上就是一个连续登录问题,这个问题的核心思维是:按照日期给排名,如果登录日期是连续的,那么日期/天减去排名的值是相等的
WITH continu_days AS(
    SELECT 
        user_id,
        DENSE_RANK() OVER(partition by user_id order by log_time) ranking,
        log_time
    FROM login_tb
    WHERE user_id IN(
        SELECT DISTINCT user_id
        FROM register_tb
    )
),
-- 求出天数与排名之间的差值
time_diff AS(
    SELECT user_id,DAY(log_time) - ranking time_gap
    FROM continu_days
)
-- 在根据用户、差值去分组,找到次数≥3的
SELECT a.user_id
FROM(
    SELECT user_id,COUNT(*) time_cnt
    FROM time_diff
    GROUP BY user_id,time_gap
) a
WHERE time_cnt >= 3