我有一个表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'];
}
答案 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))