SQL如何检查一行中的N条记录是否满足条件?

时间:2017-10-06 01:40:55

标签: sql select timestamp db2

我从传感器获得数据,如果连续10个记录的值高于常量,我需要生成警报(我有值和时间戳)。如果少,则重置计数器。我使用DB2。桌子上有一小段。如果是连续3个值大于1 - 向另一个表写入警报

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

1 个答案:

答案 0 :(得分: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;