一、窗口函数
select
dt
,round(sum(if(rk=1 and datediff(lead_dt,dt)=1,1,0))/sum(if(rk=1,1,0)),2) uv_left_rate
from (
select
dt
,row_number()over(partition by uid order by dt) rk
,lead(dt,1)over(partition by uid order by dt) lead_dt
from (
select
uid, date(in_time) dt
from tb_user_log
union
select
uid, date(out_time) dt
from tb_user_log
) t
) t
group by 1
having uv_left_rate is not null and date_format(dt,'%Y-%m')='2021-11'
order by 1
二、连接代替窗口
select t1.dt,round(count(t2.uid)/count(t1.uid),2) uv_rate
from (select uid
,min(date(in_time)) dt
from tb_user_log
group by uid) as t1 -- 每天新用户表
left join (select uid , date(in_time) dt
from tb_user_log
union
select uid , date(out_time)
from tb_user_log) as t2 -- 用户活跃表
on t1.uid=t2.uid
and t1.dt=date_sub(t2.dt,INTERVAL 1 day)
where date_format(t1.dt,'%Y-%m') = '2021-11'
group by t1.dt
order by t1.dt



京公网安备 11010502036488号