1. 利用uniontb_user_log表中,去重找到每天活跃的用户,形成t1表。注:由于in_timeout_time隔天算两天
  2. 利用窗口函数over()在表t1找到每个用户第一次登录的时间first_time, 形成表t2
  3. 利用聚合函数group by 对dt聚合,利用count(*)找到每天活跃人数,通过if(dt=first_time, 1, 0)是否为第一次登录,计算日活率uv_new_ratio
select
    dt,
    count(*) dau,
    round(sum(if(dt=first_time, 1, 0)) / count(*), 2) uv_new_ratio
from
    (select
        uid,
        dt,
        min(dt) over(partition by uid) first_time
    from
        (select
            uid,
            date(in_time) dt
        from
           tb_user_log
        union
        select
            uid,
            date(out_time) dt
        from
            tb_user_log) t1 ) t2
group by
    dt
order by
    dt;