开发者社区> 问答> 正文

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

最近需要写一个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)

返回的时间却是:

8
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) 这样的方式分组是不行的,不知道是否是计算时间的方式有误,伙伴们有其它的方式取这样的分组数据吗?

谢谢

展开
收起
小旋风柴进 2016-03-11 10:38:17 3297 0
1 条回答
写回答
取消 提交回答
  • ·GroupBy DATEDIFF('2015-02-24','2015-03-03')/7·

    你试试

    2019-07-17 18:58:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载