我有一个天气数据库,每70秒获取一次数据集(取决于气象站何时传送数据)。
我想用Pchart绘制它,但我有太多的样本,所以X轴被搞砸了。
所以我想要大约每5分钟一次的数据。 (或每30分钟)
我目前的查询是:
SELECT time, temp_out FROM wmr200 WHERE date(time) = curdate()
这样可以得到最近24小时的样本,但是太多了。
答案 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