用子查询选出每个用户的user_id和第一天登陆日期并存为temp。然后从temp选出user_id和最早登陆时间min_date,用date_add()获取第二天登陆日期,并检查将(user_id,第二天登陆日期)这个字段对在不在login表中,如果在的话就标1,代表用户第二天登陆。将整个查询作为子查询temp2。最后用标号的累加除以全部用户的数量得到比例。

select round(sum(temp2.indx)/count(distinct temp2.user_id),3) from
(select temp.user_id, temp.min_date,
case
when (temp.user_id, date_add(temp.min_date, interval 1 day)) in 
     (select l.user_id, l.date from login as l) then 1
else 0
end as indx
from (select user_id, min(date) as min_date from login
group by user_id) as temp) as temp2