簡體   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