with fresher_detail as(
    select 
    uid,
    min(date(in_time)) first_open
    from
        tb_user_log
    group by 1
)
,dau_detail as(
    select uid,
           dau_date
    from
    (
    select
        uid,
        date(in_time) dau_date
    from
        tb_user_log
    union 
    select uid,
           date(out_time) dau_date
    from
        tb_user_log
) k
)
select
    dau_date dt,
    dau,
    round(case when new_users is null then 0 else new_users end/dau,2) uv_new_ratio
from
(
    select
        dau_date,
        count(distinct uid) dau
    from
        dau_detail
    group by 1
) s1
left join
(
    select
        first_open ,
        count(1) new_users
    from fresher_detail
    group by 1

) s2
on s2.first_open = s1.dau_date
order by 1