2017-10-06 76 views
-1

我已經從傳感器獲得數據,並且如果連續10條記錄的值高於常數(我有值和時間戳),則需要生成警報。如果小於,則重置計數器。我使用DB2。桌子上有一小片。如果例如連續高於1 3級的值 - 寫入另一臺警報SQL如何檢查連續N個記錄是否符合條件?

Value Timestamp 
2 09.09.2017 0:01 
6 09.09.2017 0:04 
0 09.09.2017 0:07 
7 09.09.2017 0:10<-from here 
2 09.09.2017 0:13 
6 09.09.2017 0:16->to here 
1 09.09.2017 0:19 

爲樣本,輸出應該是一個週期時,它超出範圍

START 09.09.2017 0:10 
END 09.09.2017 0:16 
+0

如果您的數據庫引擎有觸發器,請使用它。在插入時觸發,只需編寫所需的sql來獲取記錄。然後在where子句中測試是否超出允許範圍 - 如果得到任何結果,則不符合「10行」標準。 – radarbob

+0

@radarbob我需要分析現有的數據集,有沒有插入觸發 –

回答

0

您可以識別行組依次計算不超過閾值的值的數量。對於超過閾值的序列,這是不變的。剩下的只是聚合:

select min(timestamp), max(timestamp), count(*) as num_in_sequence 
from (select t.*, 
      sum(case when value <= 1 then 1 else 0 end) over (order by timestamp) as grp 
     from t 
    ) t 
where value > 1 
group by grp 
having count(*) >= 10; 
+0

這比寫一個程序略微整潔 –

+0

戈登,你能說出爲什麼我們總結使用少於或等於(案例...?值必須高於要計數的閾值 –

+0

@KirillDrozdov ......計算不*超過閾值的數字。運行子查詢以查看它分配給行的數量。 –

相關問題