比较通俗易懂的解法#case when,不用表连接
每天的日活数及新用户占比
http://www.nowcoder.com/practice/dbbc9b03794a48f6b34f1131b1a903eb
select dt,count(dt) dau,round(sum(judge)/count(dt),2) uv_new_ratio
from
(select uid,in_time dt,
case when (uid,in_time) in
(select uid,date(min(in_time)) from tb_user_log group by uid) #所有用户最早活跃时间
then 1 else 0 end judge
#表示:如果等于最早活跃时间,则赋值1,否则赋值0,用于体现新用户。
from
(select uid,date(in_time) in_time from tb_user_log
union #如果进入时间离开时间跨天了,在两天里都记为该用户活跃过.利用union去重
select uid,date(out_time) in_time from tb_user_log
) AS new
) AS n
group by dt
order by dt