select
    (
        select
            count(distinct qpd1.device_id, qpd1.date)
        from
            question_practice_detail qpd1
        join question_practice_detail qpd2 on qpd2.date = adddate(qpd1.date, interval 1 DAY) and qpd1.device_id = qpd2.device_id
    ) / (
        select
            count(distinct dpq.device_id,dpq.date)
        from
            question_practice_detail dpq
    );

分两步 (用户当天答过题,第二天还来答题的人天数)/(用户答题的人天数)

这里计算人数不对,因为一个人可能一天有多条答题记录,如果第二天也答题了,只能算一条

所以要统计(distinct device_id,date)来对人天数进行去重统计