最难的一个题目了:

select
date
,ifnull(round(
sum(case when (user_id,date) in 
(
    select user_id,min(date) 
    from login 
    group by user_id
) 
and (user_id,date) in 
(
    select user_id,DATE_ADD(date,INTERVAL -1 DAY) 
    from login 
)
then 1 else 0 end)/
sum(case when (user_id,date) in 
(
    select user_id,min(date) 
    from login 
    group by user_id
)
then 1 else 0 end)
,3),0) p
from login
group by date
order by date

思路:主要用到SQL68 牛客每个人最近的登录日期(三)和SQL69 牛客每个人最近的登录日期(四)中的代码,我们要知道分子和分母分别是什么
分母:新用户
分子:新用户且第二天还在的
还要注意用ifnull函数。