MySQL:选择查询,5分钟增量

时间:2012-05-01 19:22:42

标签: mysql sql pchart

我有一个天气数据库,每70秒获取一次数据集(取决于气象站何时传送数据)。
我想用Pchart绘制它,但我有太多的样本,所以X轴被搞砸了。
所以我想要大约每5分钟一次的数据。 (或每30分钟)
我目前的查询是:

SELECT time, temp_out FROM wmr200 WHERE date(time) = curdate()

这样可以得到最近24小时的样本,但是太多了。

2 个答案:

答案 0 :(得分:8)

以下内容将为您提供一个样本,其中包含时间戳位于:00,:05,:10 ...

的所有数据
SELECT time, temp_out FROM wmr200 WHERE date(time) = curdate()
    AND mod(minute(time),5) = 0

我正在使用模数函数来检查时间的微小部分是否(0或)可被5整除。


如果每个时间段只需要一个结果,我们必须要复杂得多。

SELECT concat(date(time),' ',hour(time),':',round(minute(time)/5,0)*5), 
       min(temp_out), avg(temp_out), max(temp_out) 
FROM wmr200 
GROUP BY date(time), hour(time), round(minute(time)/5,0)*5

我现在无法访问MySQL实例来测试它,但这就是我的想法。它按每五分钟进行分组,按日期,小时和round(minute(time)/5,0)*5进行分组 - 将分钟数舍入到最接近的5分钟。

它选择应该分组的时间值,以及min,avg和max temp_out,因为我不确定哪种最适合您的情况。

但是,如果你的数据库没有五分钟伸展的数据(或30分钟伸展,如果你正在使用它),它仍然可能没有样本点的数据。

答案 1 :(得分:2)

如果此页面上有其他人发生,这里的解决方案可与Sam相媲美。它利用Unix时间戳和整数除法来“bin”和任意时间段内的平均值。

SELECT FROM_UNIXTIME((UNIX_TIMESTAMP(time) div (5*60))*(5*60)+(5*60)) as timeIntervals,
round(avg(temp_out),3) as temp_out
FROM wmr200 
GROUP BY 1