繁体   English   中英

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

[英]Identifying record in mysql table based on difference between two specific rows

对于以下问题,我将非常感谢有关 MySQL 查询的一些帮助。 我的表,我们称之为“数据”,包含以下字段:“时间戳”和“温度”。 每 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。

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

谢谢你的帮助。

如果您的时间戳准确无误,则可以使用自联接:

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

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

所以我相信你在加入同一个表的正确轨道上:这样的事情应该让你开始。 它是未经测试的空气代码,通常我用 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM