间隔之间的温差

时间:2013-10-14 23:21:12

标签: php mysql intervals

我的问题更多是“理论上的”而不是实际的 - 换句话说,我并不是真的在寻找一个如何做某事的特定代码,而更像是关于如何做的建议。我已经考虑了一段时间,但无法提出一些可行的解决方案。 所以基本上,我有一个MySQL数据库,可以保存我气象站的天气信息。

第一列包含测量的日期和时间(日期时间格式字段),然后有各种各样的列,如温度,湿度等。我现在感兴趣的是具有温度的那一列。数据按日期和时间升序排序,这意味着最新值始终插入到末尾。

现在,我想要做的是使用PHP脚本,连接到数据库并在特定时间间隔内查找温度变化,然后找到最大值。换句话说,例如,假设我选择间隔3h。然后我想从所有值中找到时间,在那些3小时(或5小时,1天等)中温度变化最大的地方。

问题是我真的不知道该怎么做。如果我只是从数据库中获取值,我会逐个获取值,但我不能想到一种获取值的方法,可以说是过去当前的3h。那么它很简单,只需减去它们并从当时的日期时间字段中获取日期,但是如何获取例如相隔3小​​时的值(同样,问题是它不能仅仅是一个特定的数字)过去的行数,因为数据保存的间隔不规则,范围在5-10分钟之间,所以过去3小时可能是不同的行数。)

有什么想法可以做到这一点?

很多

2 个答案:

答案 0 :(得分:0)

实际上并不十分困难。所以我认为这是一个包含timetemp字段的双列表,其中time是DATETIME字段

SELECT MAX(temp) FROM records
WHERE time >= "2013-10-14 12:00:00" and time <= "2013-10-14 15:00:00"

答案 1 :(得分:0)

SELECT t1.*, ABS(t1.temperature - t2.temperature) as change
FROM  tablename t1
JOIN tablename t2
    ON  t2.timecolumn <= (t1.timecolumn - INTERVAL 3 HOUR)
LEFT JOIN tablename t3
    ON  t3.timecolumn <= (t1.timecolumn - INTERVAL 3 HOUR)
    AND t2.timecolumn > t3.timecolumn
WHERE 
  t3.some_non_nullable_column IS NULL
ORDER BY ABS(t1.temperature - t2.temperature) DESC
LIMIT 1;

1个表连接2次, t2是t1的保证直接前任 t2是或更多之前偏移3h的最近记录。这可以通过适当的索引,以及有限数量的数据(在旁观者的眼中是有限的)是非常高效的。 然而,如果你需要大数据集中的大量查询,这是非规范化的主要候选者,你是否创建了一个表,它还存储计算的偏移量与上一个条目。