对于以下事项,我非常感谢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。
还有一些其他条件(不值得一提)也必须得到满足,但至少我可以自己处理。
感谢您的帮助。
答案 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