我当前正在运行以下查询,以获取数据库中每个用户的每日平均条目数,它正在按预期运行,但我想对其进行修改以获取每日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天并获得我选择的列的平均值。
我认为这将需要某种子查询,但是基于我在网上看到的内容,我对它们的理解不够充分,无法自行解决,任何帮助都很好。
答案 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中更具挑战性。