with login_dates as (
    select distinct user_id, date(log_time) login_date
    from login_tb
    where user_id in (select user_id from register_tb)
),
tb_2 as (
    select user_id, login_date, row_number()over(partition by user_id order by login_date) rn
    from login_dates
),
tb_3 as (
    select user_id,login_date,date_sub(login_date, interval rn day) grouped_date
    from tb_2
),
tb_4 as(
    select user_id,grouped_date, count(*) as con_days
    from tb_3
    group by user_id, grouped_date
    having con_days >= 3
)

select user_id 
from tb_4