2012-05-01 149 views
1

我有一个天气数据库,每隔70秒就会获取数据集(取决于天气站何时传递数据)。
我想使用Pchart来绘制它,但我有太多的样本,所以X轴被搞砸了。
所以我想每5分钟的数据。 (或每30分钟)
查询我目前有是这样的:MySQL:选择查询,5分钟递增

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

这得到了样品过去24个小时,但有太多。

回答

6

下面将让你由任何数据与时间戳一个样本: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,因为我不确定哪些最适合您的情况。

但是,如果您的数据库没有5分钟延伸数据(或30分钟延伸数据,如果这是您正在使用的数据),它仍然可能没有针对采样点的数据。

+0

我改成了这样: 选择时间,temp_out FROM wmr200 WHERE日期(时间)= CURDATE() 和MOD(分钟(时间),30)= 0 但一些样品似乎错过了,或者我得到重复。 由于数据没有被存储在一个稳定的PASE .. – HyperDevil

+0

输出示例: '2012-05-01 0点00分十八秒\t 4.4 2012-05-01 0点30分51秒\t 4.4 2012-05-01 01:00:01 \t 4.3 2012-05-01 01:00:50 \t 4.3' – HyperDevil

+1

@HyperDevil我编辑了一个可能的解决方案。我无法测试它,所以让我知道它是如何工作的。 –

1

万一有人在这个页面上发生任何事情,这里的解决方案可以与Sam's相媲美。它利用Unix时间戳和整数除法在任意时间段内对数据进行“分箱”并取平均值。

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