select count(date2) / count(date1) as avg_ret
//平均次日留存率 = 第 n 天相比前一天新增用户数量 / 第一天新增用户数量
//第二天继续刷题平均概率 = 第二天相比第一天继续刷题用户数量 / 第一天总人数
from (
select
distinct qpd1.device_id,
qpd1.date as date1,
qpd2.date as date2
from question_practice_detail as qpd1
left join
(
select distinct device_id,date
from question_practice_detail
) as qpd2
on qpd1.device_id = qpd2.device_id
and date_add(qpd1.date,interval 1 day) = qpd2.date
//第一天 增加一天 后的日期 正好是 第二天
) as qpd_count;