我有一个有两列的数据库。 day
列,datetime
列,overall
,int
。要求用户每小时记录一次数据。但是,如果用户处于睡眠状态,则不会有新数据。
我试图获得每日平均值。我目前有这个问题:
SELECT day, AVG(overall) AS overall FROM log GROUP BY DATE(day)
但是,如果有清晨(凌晨1-4点)的条目,则会将其与之前天的平均值分组。例如,2月2日凌晨1点应该与2月1日的数据取平均值。
我如何GROUP BY
有一个偏移量,以便清晨将被包含在前一天的平均值中?
答案 0 :(得分:1)
不是按day
分组,而是GROUP BY
day
偏移减去4小时:
SELECT DATE_ADD(t.theDate, INTERVAL 4 HOUR), t.overall
FROM
(
SELECT DATE_SUB(day, INTERVAL 4 HOUR) AS theDate, AVG(overall) AS overall
FROM log
GROUP BY DATE_SUB(day, INTERVAL 4 HOUR)
) t
这会使每天的前4个小时强制回到前一天。
我包装了查询,因为您可能仍想报告每个实际的24小时工作日,但是使用汇总结果来调整结果。