0
点赞
收藏
分享

微信扫一扫

【LeetCode 2854. 滚动平均步数】MySQL过去n日滑动窗口

题目地址

https://leetcode.cn/problems/rolling-average-steps/description/

代码

下面的代码是:

  • 【过去n_days天,以及今天】的滑动窗口
  • 对于每一天,如果有可用数据的情况下,我们会计算以该天为结束的 (n_days+1) 天连续步数的平均值,否则,对于该天来说,(n_days+1)天滚动平均步数是未定义的。

WITH t1 AS
(
    SELECT 
        user_id,
        steps_date,
        CASE
            WHEN COUNT(steps_count) OVER (
                PARTITION BY user_id 
                ORDER BY date(steps_date)
                RANGE BETWEEN INTERVAL @n_days DAY PRECEDING AND CURRENT ROW
            ) >= @n_days + 1 THEN -- 确保至少有n天的数据
                ROUND(AVG(steps_count) OVER (
                    PARTITION BY user_id 
                    ORDER BY date(steps_date)
                    RANGE BETWEEN INTERVAL @n_days DAY PRECEDING AND CURRENT ROW
                ), 2)
            ELSE NULL -- 如果不足n天,就不计算平均值
        END AS rolling_average
    FROM 
        Steps
        , (SELECT @n_days := 2 ) vars   -- 我不知道怎么改,用的时候把这一行注释掉,把所有@n_days替换为实际数值
)

SELECT * from t1 
WHERE rolling_average IS NOT NULL;



举报

相关推荐

0 条评论