/*需要注意的是,一个人一天可能来多次*/
/*关键点:(1)左外连接保存主表所代表的“前一天”记录;(2)datediff函数用于连接条件内,当该设备未匹配到后一天记录则显示null;(3)按照device_id和主表的date作为分组实现去重功能;(4)使用平均值函数计算次日留存率*/
select avg(next_day is not null) as avg_ret
from (select q1.device_id device_id, q1.date date, 
max(q2.date) next_day
from question_practice_detail q1 left outer join question_practice_detail q2
on q1.device_id = q2.device_id and datediff(q2.date, q1.date)=1
group by q1.device_id, q1.date) q