每小时汇总MySQL数据与分钟原始数据

时间:2015-09-06 07:31:45

标签: mysql group-by aggregate-functions

我有一个表table_1,它有每分钟的数据,看起来像:

+---------------------+---------+
| date_time           | value   |
+---------------------+---------+
| 2015-06-05 18:00:00 | 222.663 |
| 2015-06-05 18:01:00 | 222.749 |
| 2015-06-05 18:02:00 | 222.957 |
| 2015-06-05 18:03:00 | 223.063 |
| 2015-06-05 18:04:00 | 223.117 |
+---------------------+---------+

我希望获取每小时最小值和最大值。类似的东西:

+---------------------+---------+
| date_time           | value   |
+---------------------+---------+
| 2015-06-05 18:10:00 | 200.663 |
| 2015-06-05 18:45:00 | 222.749 |
| 2015-06-05 19:10:00 | 190.957 |
| 2015-06-05 19:33:00 | 400.063 |
+---------------------+---------+

目前我正在PHP中创建一个for循环,并在每个小时运行一个查询。但是,它显然不是最好的方法,因此非常消耗时间。例如:

for($temp = $st; $temp <= $et; $temp = $temp + 60){//looping for each hour

 $sql1 = "select * from table_1 where value in 
 (select max(value) from table_1 
 where date_time >= '".date('Y-m-d H:i:s',$st)."' 
 and date_time < '".date('Y-m-d H:i:s',$temp)."' ) 
 and date_time >= '".date('Y-m-d H:i:s',$st)."' 
 and date_time < '".date('Y-m-d H:i:s',$temp)."' limit 1";

 $rs1 = mysql_query($sql1);

 $row1 = mysql_fetch_assoc($rs1)
 $val1 = $row1['value']; 
 $date1 = $row1['date_time'];

} 

1 个答案:

答案 0 :(得分:0)

Anawer的问题

TypeError: must be type, not classobj

<强> 1。如何在6小时或15分钟的间隔内做同样的事情。

间隔15分钟:

select DATE_FORMAT(date_time,'%Y-%m-%d %H:00:00') h, min(value), max(value)
    from thetable 
  group by h

6小时间隔变为(6 * 60 * 60)

<强> 2。上面的结果不显示与最小值和最大值对应的原始时间戳。如何获得这些。

此类查询可为您提供所需内容。但是,例如,如果某个区间中存在一些最小值,那么可以获得多少这样的值

select date_time, min(value), max(value) 
     from t1 
  group by round(unix_timestamp(date_time)/(15 * 60))