-- 流失用户回归 = 回归用户/流失用户 (取某个日期的用户为样本 )
-- 流失用户=样本中(开始日期~结束日期未登录用户)
-- 回归用户=样本中(样本日期 且 回归日期登录 且 在流失用户)
select count(distinct b.uid)/
count(distinct a.uid)
from(
-- 流失用户
select distinct a.uid
from
(
-- 登录时间用户的样本 2022-05-01 代表以2022-05-01登录的用户为样本以下日期需要统一修改
select distinct uid
from user_login_record
where date_format(login_time,'%Y-%m-%d') ="2022-05-01"
) as a
left join
(
-- 连续不登录用户
select distinct uid
from user_login_record
-- 日期后开始统计的天数 INTERVAL 1 代表+1 5月2日开始
where date_format(login_time,'%Y-%m-%d')>=date_add("2022-05-01",INTERVAL 1 DAY) and
-- 日期后截至统计的天数 INTERVAL 2 代表+2 5月3日结束
date_format(login_time,'%Y-%m-%d')<=date_add("2022-05-01",INTERVAL 2 DAY)
) as b
on a.uid=b.uid
where b.uid is null
) as a
left join
(
-- 登录用户
select distinct a.uid
from
(
select distinct uid
from user_login_record
where date_format(login_time,'%Y-%m-%d')="2022-05-01"
) as a
INNER join
(
-- 回归用户
select distinct uid
from user_login_record
-- 回归用户时间,INTERVAL 3 代表+3 即5月4日的登录用户
where date_format(login_time,'%Y-%m-%d')=date_add("2022-05-01",INTERVAL 3 DAY )
) as c
on a.uid=c.uid
) as b
on a.uid=b.uid;
流失用户回归sql 各位看看这个规则有没有问题?
于 2022-06-22 16:44:09 首次发布