select act_day as dt,
count(*) as dau,
round(sum(if_new)/count(*),2) as uv_new_ratio
from(
select uid, date(in_time) as act_day,
min(date(in_time)) over(partition by uid) as new_day,
if(date(in_time)=min(date(in_time)) over(partition by uid) ,1,0) as if_new #当天新用户计为1,否则0
from tb_user_log
union
select uid, date(out_time) as out_day,
min(date(in_time)) over(partition by uid),
if(date(out_time)=min(date(in_time)) over(partition by uid) ,1,0) as if_new #当天新用户计为1,否则0
from tb_user_log
) as t1
group by act_day
order by act_day