代码之家  ›  专栏  ›  技术社区  ›  Joe Scotto

时间段平均7天?

  •  1
  • Joe Scotto  · 技术社区  · 6 年前

    我目前正在运行以下查询以获取我的数据库中每个用户的每日平均条目数,它按预期工作,但我想修改它以获取每天7天的平均值。

    SELECT
        AVG(bg),
        AVG(carbs),
        timestamp
    FROM users_entries
    WHERE uid = '10b47fded7d2ea8d' AND
    timestamp >= '2019-01-01 00:00:00' AND timestamp <= '2019-01-30 00:00:00'
    GROUP BY DAY(timestamp)
    

    例如,对于时间框架, 2019-01-01 00:00:00 2019-06-01 00:00:00 我想找出所有7天的平均值并把它们列出来。基本上,在时间框架内每天进行一次,返回7天,得到我选择的列的平均值。

    我认为这需要一些子查询,但是基于我在网上看到的内容,我对它们的理解不够好,无法自己解决,任何帮助都会很好。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Gordon Linoff    6 年前

    在MySQL8+中,可以使用窗口函数:

    SELECT DATE(timestamp),
           AVG(bg),
           AVG(carbs),
           AVG(AVG(bg)) OVER (ORDER BY DATE(timestamp) ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) as bg_7,
           AVG(AVG(carbs)) OVER (ORDER BY DATE(timestamp) ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) as bg_7,
    FROM users_entries
    WHERE uid = '10b47fded7d2ea8d' AND
          timestamp >= '2019-01-01' AND
          timestamp < '2019-01-30'
    GROUP BY DATE(timestamp);
    

    这在旧版本的MySQL中更具挑战性。