采用虚拟表做的,可拓展空间大。请大佬多多指教,先做出来最早登录的时间和人,在求出来每天登录时间的和人(虚拟表)
在求出来两个虚拟表相连,并把条件写出来因注册日=注册日,所以,要建立相连。再求出来注册人数,用count(distinct uid)求出来当天活跃人数 一除以就行了
with date1 as (
select uid,date(min(in_time)) as first_date from tb_user_log
group by uid
)
,date2 as
(
select uid,date(in_time) as time1 from tb_user_log
union
select uid,date(out_time) as time1 from tb_user_log
group by uid,time1
)
select
t1.time1,
duid,
round(
day0/duid,2) as cnt
from
(
select
t.time1,
sum(case when t.diff=0 then 1 else 0 end ) as day0,
count(distinct uid) as duid
from
(SELECT
date1.first_date,
date2.uid,
date2.time1,
datediff(date2.time1,date1.first_date) as diff
from date2 left join date1 on date2.uid=date1.uid and date1.first_date=date2.time1
) as t
group by t.time1
) as t1
order by t1.time1 asc



京公网安备 11010502036488号