with a as
(select distinct device_id,date as t
from question_practice_detail),

b as(
    select distinct device_id,date as t
from question_practice_detail
)

select round(count(b.device_id)/count(a.device_id),4) as avg_ret
from a
left join b on a.device_id = b.device_id
and date_sub(b.t,interval 1 day) = a.t

二刷 简单