select sum(if(datediff(t1.next_date,t1.first_date) = 1,1,0)) / count(*) avg_ret from( select device_id ,`date` first_date ,lead(date,1,null)over(partition by device_id order by date asc) next_date from ( select device_id,`date` from question_practice_detail group by device_id,`date` ) tt )t1
- 去重
- 计算第二天还在的 / 第一天的人