Php 获取时间间隔之间的温差

Php 获取时间间隔之间的温差,php,mysql,intervals,Php,Mysql,Intervals,我的问题更多的是理论上的,而不是实践上的——换句话说,我并不是真的在寻找关于如何做某事的特定代码,而是关于如何做的建议。我已经考虑了一段时间,但没有想出可行的解决办法。 所以基本上,我有一个MySQL数据库,可以保存气象站的天气信息 第一列包含测量的日期和时间(Datetime格式字段),然后是一系列不同的列,如温度、湿度等。我现在感兴趣的是带有温度的列。数据按日期和时间升序排序,这意味着最近的值始终插入到末尾 现在,我要做的是使用一个PHP脚本,连接到db,找到某个时间间隔内的温度变化,然后找

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

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

现在,我要做的是使用一个PHP脚本,连接到db,找到某个时间间隔内的温度变化,然后找到最大值。换句话说,比如说,我选择间隔3h。然后我想从所有的值中找出3小时(或5小时,1天等)内温度变化最显著的时间

问题是我真的不知道怎么做。如果我只是从db中获取值,我会一个接一个地获取值,但是我想不出一种方法来获取一个值,比如说过去的3h值。然后很容易,只需减去它们,然后从datetime字段中获取当时的日期,但是如何获取相隔3小时的值呢(此外,问题在于它不能仅仅是过去的特定行数,因为数据保存的间隔不是固定的,介于5-10分钟之间,因此过去的3小时可能是不同的行数)

你知道怎么做吗


Thx很多实际上并不难。所以我假设它是一个两列的表,有
时间
温度
字段,其中
时间
是日期时间字段

SELECT MAX(temp) FROM records
WHERE time >= "2013-10-14 12:00:00" and time <= "2013-10-14 15:00:00"
从记录中选择最大(温度)
其中时间>=“2013-10-14 12:00:00”和时间<代码>选择t1.*,ABS(t1.温度-t2.温度)作为变化
来自表名t1
联接表名t2

关于t2.timecolumn Thx,但恐怕你误解了这个问题。我想扫描整个数据库,找出最大的温度变化(而不是实际的温度值)在这3小时内——换句话说,在整个db历史中,找到温度变化最快的时间——这不是他想要的。他不想要读数之间的温度变化,而是间隔之间的温度变化(在他的例子中,这可能由一个参数提供——3小时)在间隔之间可能有很多读数,因为读数之间的时间从5分钟到10分钟随机变化。例如,第一行diff减去第一个和第18个温度,第二行diff减去第二个和第23个温度,等等。这也是我所想的,实际上添加了另一列,但问题是这将相对容易,只要告诉他添加一个3小时前的值,然后我将两个临时值放在同一行上,但问题是,这将首先增加db大小,其次,更重要的是,限制我只使用db中列中的时间间隔,如果我想使用,让我们说6小时相反,这将是无用的,这就是为什么我试图避免这样做,并完全通过脚本。就大小而言,它是一个很大的数据库,目前约为200000行。确切地说,我正在寻找在特定时间间隔内温度从整个数据库中最快的变化。那么,这个答案确实不是:)我会马上删除它,但由于间隔不规则,您可能需要详细说明如何在间隔内处理平局中断(假设您选择3h,我们只能选择3h05中的2h55,选择哪个?),我认为这不是问题,我可以使用datetime_字段-间隔3小时,因为现在有两个答案回答不同的问题,也许需要澄清一下:您是否需要(a)另一个答案中的最高温度(b)与我的答案中的先前测量值相比的最大变化(c)仅需要最大范围(
max()-MIN()
),(d)最大的连续变化(多个记录,一行中有所有正负偏移量)或(e)不同的东西?或者像(f)给定整个数据集,哪个区间N的总差异最大,或者(g)给定整个数据集,哪个区间在两个连续记录之间的差异最大?好的,我会尝试解释,对不起,我不是母语人士。所以最好的方法,让我们举一个例子:时间1-温度10C时间2-温度12C时间3-温度14C时间4-温度13C时间5-温度16C现在让我们假设时间有1h的差异,然后我想扫描整个db,找出T的最大变化,比如1h,在这种情况下,最后一个时间间隔是3C。因此,我希望结果是开始和结束时间+实际更改值
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;