with t as (
    -- 创建一个CTE(公用表表达式),用于计算每个用户的日期差异
    select 
        user_id,
        date_sub(log_time, interval rk day) as date_diff  -- 计算每个登录日期减去行号的日期差异
    from (
        -- 内部查询:为每个用户的登录记录分配一个行号
        select
            user_id,
            date(log_time) as log_time,  -- 提取日期部分
            row_number() over (partition by user_id order by log_time) as rk  -- 为每个用户按日期分配行号
        from 
            login_tb
        where 
            user_id in (select user_id from register_tb)  -- 仅考虑已注册用户的登录记录
    ) as a
)

-- 主查询:查找具有连续三天或更多天登录的用户
select
    user_id
from 
    t
group by 
    user_id, date_diff  -- 按用户和日期差异分组
having 
    count(date_diff) >= 3  -- 只选择连续登录天数达到3天或以上的组
order by 
    user_id;  -- 按用户ID排序