select a.dt,count(distinct a.uid) dau,round(count(distinct b.uid)/count(distinct a.uid),2) from (select uid,date(in_time) dt from tb_user_log union all select uid,date(out_time) dt from tb_user_log group by uid,dt ) a left join (select uid,min(date(in_time)) dt from tb_user_log group by uid ) b on a.uid=b.uid and a.dt=b.dt group by a.dt order by a.dt;