4

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

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

这将获取过去 24 小时的样本,但样本太多。

4

2 回答 2

9

以下将为您提供一个包含时间戳为 :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 分钟,如果您正在使用),它可能仍然没有样本点的数据。

于 2012-05-01T19:29:46.220 回答
3

万一其他人出现在此页面上,这里有一个与 Sam 相当的解决方案。它利用 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
于 2014-11-06T23:59:36.307 回答