【问题标题】:GROUP BY interval overlapping timestamp MySQL queryGROUP BY 间隔重叠时间戳 MySQL 查询
【发布时间】:2013-01-07 10:02:07
【问题描述】:

我一直在阅读其他问题,但没有运气。我有一个包含列(邮票,价值)的表格。 '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 是否高于每个日期组的最早时间戳?
  • 请不要选择不在您的GROUP BY 中的列。 MySQL 扩展了这个功能,但它的行为并不准确,应该避免。
  • 尽可能使用x BETWEEN y AND z 而不是x &gt;= y AND x &lt;= z
  • 上面返回的戳记是每个日期组最近的戳记。前任。将 2012-12-01 05:00:00 到 2012-12-02 05:00:00 的所有值求和。
  • 抱歉,我编辑了帖子,因为我有一个关于“日期(邮票)”的输入错误

标签: mysql group-by timestamp intervals


【解决方案1】:

我认为您只想将小时数设置为 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时间戳,需要先转换一下。

【讨论】:

  • 感谢您的回复。我确实得到了预期的邮票,但总和(价值)似乎没有。我检查并意识到戳列是 UNIX 时间戳而不是日期时间。
猜你喜欢
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多