[英]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.