WITH base AS (
SELECT
device_id,
practice_date,
LEAD(practice_date) OVER (
PARTITION BY device_id
ORDER BY practice_date
) AS next_date
FROM (
SELECT
device_id,
DATE(date) AS practice_date
FROM question_practice_detail
GROUP BY device_id, DATE(date)
) t
)
SELECT
ROUND(
SUM(CASE WHEN DATEDIFF(next_date, practice_date) = 1 THEN 1 ELSE 0 END)
/ COUNT(*),
4
) AS avg_ret
FROM base;

京公网安备 11010502036488号