select round(avg(if(datediff(t3.date,t2.date)=1,1,0)),3) p   # step6:判断第一次和第二次登陆之间间隔的天数是否为1,为1则记为1,否则记为0,使用if函数不会忽略none值,直接avg求概率。
from
(select *
from (select user_id, `date`, rank()over(partition by user_id order by `date`) r
from login) t1    # step1:使用窗口函数,先将原表按用户user_id分组,并在组内将日期排序
where r = 1) t2   # step2:将每个用户第一次登陆的记录提取成t2表
left join   # step5:左联接表
(select *
from (select user_id, `date`, rank()over(partition by user_id order by `date`) r
from login) t1
where r = 2) t3    # step4:将每个用户第二次登陆的记录提取成t3表
on t2.user_id = t3.user_id