WITH base AS (
SELECT
device_id,
DATE(date) AS practice_date,
RANK() OVER (
PARTITION BY device_id
ORDER BY DATE(date)
) AS rk
FROM question_practice_detail
GROUP BY device_id, DATE(date)
)
SELECT
ROUND(
SUM(
CASE
WHEN DATEDIFF(b2.practice_date, b1.practice_date) = 1 THEN 1
ELSE 0
END
) / COUNT(*),
4
) AS avg_ret
FROM base b1
LEFT JOIN base b2
ON b1.device_id = b2.device_id
AND b2.rk = b1.rk + 1;

京公网安备 11010502036488号