我的问题更多是“理论上的”而不是实际的 - 换句话说,我并不是真的在寻找一个如何做某事的特定代码,而更像是关于如何做的建议。我已经考虑了一段时间,但无法提出一些可行的解决方案。 所以基本上,我有一个MySQL数据库,可以保存我气象站的天气信息。
第一列包含测量的日期和时间(日期时间格式字段),然后有各种各样的列,如温度,湿度等。我现在感兴趣的是具有温度的那一列。数据按日期和时间升序排序,这意味着最新值始终插入到末尾。
现在,我想要做的是使用PHP脚本,连接到数据库并在特定时间间隔内查找温度变化,然后找到最大值。换句话说,例如,假设我选择间隔3h。然后我想从所有值中找到时间,在那些3小时(或5小时,1天等)中温度变化最大的地方。
问题是我真的不知道该怎么做。如果我只是从数据库中获取值,我会逐个获取值,但我不能想到一种获取值的方法,可以说是过去当前的3h。那么它很简单,只需减去它们并从当时的日期时间字段中获取日期,但是如何获取例如相隔3小时的值(同样,问题是它不能仅仅是一个特定的数字)过去的行数,因为数据保存的间隔不规则,范围在5-10分钟之间,所以过去3小时可能是不同的行数。)
有什么想法可以做到这一点?
很多
答案 0 :(得分:0)
实际上并不十分困难。所以我认为这是一个包含time
和temp
字段的双列表,其中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的最近记录。这可以通过适当的索引,以及有限数量的数据(在旁观者的眼中是有限的)是非常高效的。 然而,如果你需要大数据集中的大量查询,这是非规范化的主要候选者,你是否创建了一个表,它还存储计算的偏移量与上一个条目。