select 
count(distinct q2.device_id,q2.date)/count(distinct q1.device_id,q1.date)
as avg_ret 
from question_practice_detail as q1
left join question_practice_detail as q2//形成q1为主表,q2为q1和q2交集的两部分
on q1.device_id=q2.device_id and datediff(q1.date,q2.date)=1//datediff();两个时间的差值