select
    t.dt,
    round(count(distinct a.uid) / count(distinct t.uid),2) as uv_left_rate
from
    (
        select
            date (min(in_time)) as dt,
            uid
        from
            tb_user_log
        group by
            uid
    ) t
    left join (
        select
            uid,
            date (in_time) as dt
        from
            tb_user_log
        union
        select
            uid,
            date (out_time) as dt
        from
            tb_user_log
    ) a on 
    t.uid = a.uid
    and t.dt = date_sub(a.dt,interval 1 day)
where
    date_format(t.dt, '%Y-%m') = '2021-11'
group by
    t.dt
order by
    t.dt


很唐的格式化,空格会导致函数不能运行,题目主要考了union跨天