题解 | #2021年11月每天新用户的次日留存率#
2021年11月每天新用户的次日留存率
https://www.nowcoder.com/practice/1fc0e75f07434ef5ba4f1fb2aa83a450
select lef.dt_in as dt , round(avg(lef.flag), 2) as uv_left_rate from( select dt1.uid # 所有首次活跃用户 , dt1.dt_in # 首次活跃日期 , (case when datediff(dt1.dt_out, dt1.dt_in) = 1 then 1 when datediff(dt2.dt_in, dt1.dt_in) = 1 then 1 else 0 end) as flag from( select * from( select # 查找每个用户首次活跃日期和首次离开日期 ug.uid , date(ug.in_time) as dt_in , date(ug.out_time) as dt_out , row_number() over (partition by ug.uid order by date(ug.in_time)) as rn_in from tb_user_log as ug ) as uv where uv.rn_in = 1 # 首次进入和首次离开 ) as dt1 left join ( select * from( select # 查找每个用户的第二次活跃日期 ug.uid , date(ug.in_time) as dt_in , date(ug.out_time) as dt_out , row_number() over (partition by ug.uid order by date(ug.in_time)) as rn_in from tb_user_log as ug ) as uv where uv.rn_in = 2 ) as dt2 on dt1.uid = dt2.uid # 每个用户的首次活跃,首次离开,第二次活跃 ) as lef where date_format(lef.dt_in, "%Y-%m") = "2021-11" group by lef.dt_in order by dt