如何使用偏移量对日期时间进行分组?

时间:2016-01-19 03:12:27

标签: mysql

我有一个有两列的数据库。 day列,datetime列,overallint。要求用户每小时记录一次数据。但是,如果用户处于睡眠状态,则不会有新数据。

我试图获得每日平均值。我目前有这个问题:

SELECT day, AVG(overall) AS overall FROM log GROUP BY DATE(day)

但是,如果有清晨(凌晨1-4点)的条目,则会将其与之前天的平均值分组。例如,2月2日凌晨1点应该与2月1日的数据取平均值。

我如何GROUP BY有一个偏移量,以便清晨将被包含在前一天的平均值中?

1 个答案:

答案 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小时工作日,但是使用汇总结果来调整结果。