思路如下:
1.首先利用groupby 获取新用户首次登陆的时间
(select user_id,min(date) date from login
group by user_id) t2
2.利用链接把每个用户登陆的时间和初次登陆的时间连接起来
3.计算用户登陆的时间是否比首次登陆时间大1天,如果是则是次日留存,不是则次日流失
4.计算login表里所有的新用户数目做分子即可
select round(sum(case when l1.date-t2.date=1 then 1 else 0 end)/
count(distinct l1.user_id),3) p
from login l1
join
(select user_id,min(date) date from login
group by user_id) t2
on l1.user_id = t2.user_id