WITH daily_activity AS ( -- 定义一个名为 daily_activity 的公共表表达式,用于获取不同设备和日期的记录
SELECT DISTINCT device_id, date
FROM question_practice_detail
),
activity_with_lead AS ( -- 再定义一个名为 activity_with_lead 的公共表表达式
SELECT
device_id, -- 选择设备 ID
date, -- 选择日期
LEAD(date) OVER (PARTITION BY device_id ORDER BY date) AS next_date -- 通过窗口函数获取每个设备按日期排序的下一个日期
FROM
daily_activity
)
SELECT
ROUND(AVG(CASE -- 计算平均值并四舍五入到 4 位小数
WHEN DATEDIFF(next_date, date) = 1 THEN 1.0 -- 如果下一个日期与当前日期相差 1 天,值为 1
ELSE 0 -- 否则为 0
END), 4) AS avg_ret -- 将结果命名为 avg_ret
FROM
activity_with_lead;