1.先得到用户活跃表(用union去重)
select uid, date(in_time) dt from tb_user_log
union
select uid,date(out_time) dt from tb_user_log
2.得到每名用户最早出现的时间
select uid,min(date(in_time)) new_time from tb_user_log
group by uid
两表连接
(select uid, date(in_time) dt from tb_user_log
union
select uid,date(out_time) dt from tb_user_log) t1
join
(select uid,min(date(in_time)) new_time from tb_user_log
group by uid ) t2
on t1.uid = t2.uid
3.计算日活和新用户占比
日活(按照日期聚合记数)
count(t1.uid)
新用户计算(当最早出现的时间等于当天,则取1,记为新用户)
sum(if(new_time=dt,1,0))
最终的代码
select dt, count(t1.uid) dau, round(sum(if(new_time=dt,1,0))/count(t1.uid),2)
from (select uid, date(in_time) dt from tb_user_log
union
select uid,date(out_time) dt from tb_user_log) t1
join
(select uid,min(date(in_time)) new_time from tb_user_log
group by uid ) t2
on t1.uid = t2.uid
group by dt
order by dt