GROUP BY间隔重叠时间戳MySQL查询 [英] GROUP BY interval overlapping timestamp MySQL query

查看:294
本文介绍了GROUP BY间隔重叠时间戳MySQL查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在阅读其他问题,没有运气。我有一张表格(邮票,价值)。 '邮票'栏存储每小时的时间戳。我想要做的是根据查询中指定的时间戳范围来检索24小时间隔的SUM(值):

  SELECT戳记,
总和(值)
从表格
WHERE戳记> = Date_sub('2012-12-02 05:00:00',INTERVAL 1天)
和邮票< '2013-01-01 05:00:00'
GROUP BY日期(印章)

我正在寻找的结果如下所示:

 邮票价值
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

实际表格如下所示:

 印花价值
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
...

* 注意邮票列的数据类型是时间戳

希望将小时数设置为5,以与您的范围保持一致。如果是这样,你可以做到这一点:

 选择投射(日期(印章)作为日期时间)+间隔5小时
总和(价值)
从表
WHERE邮票> = Date_sub('2012-12-02 05:00:00',INTERVAL 1天)
和邮票< '2013-01-01 05:00:00'
GROUP BY日期(印章)

但是,我想你可能真的想要这样说:

  SELECT cast(日期(邮票 - 间隔5小时)作为日期时间)+间隔5小时
总和(价值)
从表
WHERE邮票> = Date_sub('2012-12-02 05:00:00',INTERVAL 1天)
和邮票< '2013-01-01 05:00:00'
GROUP BY日期(邮票 - 间隔5小时)

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



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

这是假设时间戳确实是一个日期时间。如果它是UNIX时间戳,则需要先将其转换。


I've been reading other questions and had no luck. I have a table with columns (stamp,value). The 'stamp' column stores hourly timestamps. What I'm trying to do is to retrieve SUM(value) for intervals of 24 hours depending on a range of timestamps specified in the query:

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) 

The result I'm looking for would look like this:

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

Actual table looks like this:

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
...

*Note that the stamp column's datatype is timestamp

解决方案

I think you just want to set the hours to 5, to be consistent with your range. If so, you can do this:

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) 

But, I think you might actually want to phrase this a bit differently:

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)

This actually realigns the dates on the 5-hour boundary.

Note: these queries are untested, so may contain syntax errors.

This is assuming that the timestamp is really a datetime. If it is a UNIX timestamp, you need to convert it first.

这篇关于GROUP BY间隔重叠时间戳MySQL查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆