SQL按时间周期分组,取分组数据

Tedd 发布于 2015/03/04 13:25
阅读 3K+
收藏 0

Hi 伙伴们,

最近需要写一个sql分组查询(使用的数据库是mysql),时间周期是可变的,比如需要统计一个小时内每5分钟,或者10分钟的数据,或者一个月之内每几天,每十天的数据,目前我的sql是这样的

select max(value),min(value),avg(value)  from history 
where itemid=30094  and clock>=UNIX_TIMESTAMP('2015-03-03 07:00:00') 
and clock <UNIX_TIMESTAMP('2015-03-03 08:00:00') 
group by clock-clock%(5*60)



clock字段是unix时间戳格式的,这个sql取的是1个小时内每5分钟的数据。返回的时间结果没什么问题

但是有一个问题,如何时间范围扩大,比如取一周的数据,按天分组,就会出现日期不匹配的现象

比如:

select max(value),min(value),avg(value),FROM_UNIXTIME(clock-clock%(1440*60)) as dt from history 
where itemid=30566  and clock>=UNIX_TIMESTAMP('2015-02-24 00:00:00') 
and clock <UNIX_TIMESTAMP('2015-03-03 00:00:00') 
group by clock-clock%(1440*60)



返回的时间却是:

2015-02-23 08:00:00
2015-02-24 08:00:00
2015-02-25 08:00:00
2015-02-26 08:00:00
2015-02-27 08:00:00
2015-02-28 08:00:00
2015-03-01 08:00:00
2015-03-02 08:00:00



理想结果应该是从2015-02-24 00:00:00开始的,现在却是从 2015-02-23 08:00:00 开始的.

照目前的结果看 使用 clock-clock%(1440*60) 这样的方式分组是不行的,不知道是否是计算时间的方式有误,伙伴们有其它的方式取这样的分组数据吗?

谢谢


加载中
0
marsfrom
marsfrom

GroupBy DATEDIFF('2015-02-24','2015-03-03')/7

你试试

0
marsfrom
marsfrom
时间戳从'1970-01-01 08:00:00开始
Tedd
Tedd
意思是一天是从08:00:00点开始记时的?sql中按天分组的话,就是从08:开始的,如果group by 几个小时之内的数据,结果正常.
返回顶部
顶部