新用户的次日留存率=(第一天登录的新用户并且第二天也登录)/(总用户)

1、先求总用户数

#select count(distinct user_id) from login

2、找到每个用户第一天登录的日子

#select user_id, min(date) from login group by user_id

3、找到第一天登录的新用户且第二天也登录了

#select user_id, DATE_ADD(min(date), interval 1 day) from login group by user_id

4、最后计算第二天也登录的新用户数量,除以总用户数就可得到次日留存率。

select round(count(distinct user_id) * 1.0 
        / (select count(distinct user_id) from login), 3)
from login
where (user_id, date) 
in (select user_id, DATE_ADD(min(date), interval 1 day) 
    from login group by user_id);