根据两个特定行之间的差异来识别mysql表中的记录

时间:2015-10-26 16:12:56

标签: mysql timestamp compare difference

对于以下事项,我非常感谢MySQL查询的一些帮助。 我的表格,我们称之为" data",包含以下字段:" timestamp"和"温度"。 每隔30秒就会添加一条新记录。 我的目标是确定记录(时间戳),与2分钟后添加的记录(4个记录之后)相比,温差为20度(或更高

实施例

...  
19:14:08 99
19:14:38 100
19:15:08 101
19:15:38 105
19:16:08 115
19:16:38 126
19:17:08 150
19:17:38 151
...

在这种情况下,我必须找到的时间戳是19:14:38,因为如果与19:16:38的那个相比,我们有126-100 = 26> 20。

还有一些其他条件(不值得一提)也必须得到满足,但至少我可以自己处理。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果您的时间戳完全正确,则可以使用自加入:

select t.*
from t join
     t tnext
     on t.timestamp = tnext.timestamp - interval 2 minutes
where tnext.temperature - t.temperature > 20;

然而,这在很大程度上取决于时间戳的准确性。

答案 1 :(得分:0)

所以我相信你在同一张桌子上加入了正确的轨道:这样的事情应该让你开始。这是未经测试的空中代码,通常我在oracle sql中编写,所以请原谅任何语法细微差别......

SELECT
a.TEMPERATURE AS NEW_TEMP
,b.TEMPERATURE AS PRIOR_TEMP
FROM
DATA a
INNER JOIN DATA b ON
   b.TIMESTAMP = a.TIMESTAMP-TO_DATE('02','MM')
   AND ABS(ABS(a.TEMPERATURE) - ABS(b.TEMPERATURE)) > 20

此外 - 使用时间戳可能不如您想象的那么可靠,因为可能存在您不希望存在的变化(例如时间戳可能会关闭一秒,即它恰好是1:59秒之前新记录。在这种情况下,此连接将错过它。而如果您使用上面建议的自动增强ID,您可以简单地将第一个连接子句替换为:

b.RECORD_ID = a.RECORD_ID-4