获得7天的平均时间范围?

时间:2019-01-23 02:13:06

标签: mysql sql

我当前正在运行以下查询,以获取数据库中每个用户的每日平均条目数,它正在按预期运行,但我想对其进行修改以获取每日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:002019-06-01 00:00:00,我想查找7天的所有平均值并将其列出。基本上按时间范围内的每一天,回溯7天并获得我选择的列的平均值。

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

1 个答案:

答案 0 :(得分:1)

在MySQL 8+中,您可以使用窗口函数:

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中更具挑战性。