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



京公网安备 11010502036488号