step1:查找6月2号的用户id,登录日期为表a;
step2:将日期减1天的记录作为表b;
step3:使用Left join利用今天的日期=明天的日期-1作为匹配条件;
step4:如果匹配到数据,说明用户在6月2号登录过软件,在第二天也登录了软件,该情况使用if转换avg_ret为1。否则说明第二天没有登录软件,使用if转换avg_ret为0;
step5:计算avg_ret的均值即为6月2号的T+1日留存。
left join为左连接。
Select round(avg(if(b.user_id is not null, 1, 0)), 2) as avg_ret
from
(Select distinct user_id, login_date
From logintb Where login_date = '2021-6-2'
)a
Left join
(Select distinct user_id, date_sub(login_date, interval 1 day) as login_date
From logintb
)b
On a.user_id = b.user_id and a.login_date=b.login_date;

京公网安备 11010502036488号