1

我一直在阅读其他问题,但没有运气。我有一个包含列(邮票,价值)的表格。'stamp' 列存储每小时的时间戳。我要做的是根据查询中指定的时间戳范围以 24 小时为间隔检索 SUM(value):

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

4

1 回答 1

2

我认为您只想将小时数设置为 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) 

但是,我认为您实际上可能想换一种说法:

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)

这实际上重新调整了 5 小时边界上的日期。

注意:这些查询未经测试,因此可能包含语法错误。

这是假设时间戳实际上是一个日期时间。如果是 UNIX 时间戳,则需要先进行转换。

于 2013-01-23T20:25:23.213 回答