按间隔分组重叠时间戳MySQL查询
我一直在读其他问题,但运气不好。我有一个带有列(戳记、值)的表。“stamp”列存储每小时的时间戳。我试图做的是根据查询中指定的时间戳范围检索24小时间隔的总和(值):按间隔分组重叠时间戳MySQL查询,mysql,group-by,timestamp,intervals,Mysql,Group By,Timestamp,Intervals,我一直在读其他问题,但运气不好。我有一个带有列(戳记、值)的表。“stamp”列存储每小时的时间戳。我试图做的是根据查询中指定的时间戳范围检索24小时间隔的总和(值): SELECT stamp, Sum(value) FROM table WHERE stamp >= Date_sub('2012-12-02 05:00:00', INTERVAL 1 day) AND stamp < '2013-01-01 05:00:00' GROU
SELECT stamp,
Sum(value)
FROM table
WHERE stamp >= Date_sub('2012-12-02 05:00:00', INTERVAL 1 day)
AND stamp < '2013-01-01 05:00:00'
GROUP BY Date(stamp)
实际表如下所示:
stamp value
2012-12-02 05:00:00 12024
2012-12-03 05:00:00 11211
2012-12-04 05:00:00 19834
...
2013-01-01 05:00:00 10232
stamp value
2012-12-01 01:00:00 345
2012-12-01 02:00:00 100
2012-12-01 03:00:00 104
2012-12-01 04:00:00 103
2012-12-01 05:00:00 101
2012-12-01 06:00:00 102
...
2013-01-01 05:00:00 207
2013-01-01 06:00:00 307
2013-01-01 07:00:00 223
...
*请注意,stamp列的数据类型是timestamp我想您只需要将小时数设置为5,以与您的范围保持一致。如果是,您可以这样做:
SELECT cast(date(stamp) as datetime) + interval 5 hour
Sum(value)
FROM table
WHERE stamp >= Date_sub('2012-12-02 05:00:00', INTERVAL 1 day)
AND stamp < '2013-01-01 05:00:00'
GROUP BY Date(stamp)
选择cast(日期(戳记)作为日期时间)+间隔5小时
总和(价值)
从桌子上
其中盖章>=日期(2012-12-02 05:00:00),间隔1天
邮票<'2013-01-01 05:00:00'
分组日期(盖章)
但是,我想你可能真的想用不同的措辞来表达:
SELECT cast(date(stamp - interval 5 hour) as datetime) + interval 5 hour
Sum(value)
FROM table
WHERE stamp >= Date_sub('2012-12-02 05:00:00', INTERVAL 1 day)
AND stamp < '2013-01-01 05:00:00'
GROUP BY Date(stamp - interval 5 hour)
选择cast(日期(戳记-间隔5小时)作为日期时间)+间隔5小时
总和(价值)
从桌子上
其中盖章>=日期(2012-12-02 05:00:00),间隔1天
邮票<'2013-01-01 05:00:00'
按日期分组(盖章-间隔5小时)
这实际上会重新调整5小时边界上的日期
注意:这些查询未经测试,因此可能包含语法错误
这是假设时间戳实际上是一个日期时间。如果它是UNIX时间戳,您需要首先转换它。在每个日期组的最早时间戳上方返回的
戳也是如此吗?请不要选择不在组中的列。MySQL扩展了此功能,但其行为并不精确,应避免使用。只要可能,请使用y和z之间的x
,而不是x>=y和x。上面返回的戳记是每个日期组的最新戳记。例如,将2012-12-01 05:00:00到2012-12-02 05:00:00之间的所有值相加。对不起,我编辑了这篇文章,因为我在“日期(戳记)”方面有一个键入错误。感谢您的回复。我确实如期得到了邮票,但总数(价值)似乎不太准确。我检查并意识到stamp列是UNIX时间戳,而不是datetime。