SQL如何检查连续N个记录是否符合条件?

问题描述:

我已经从传感器获得数据,并且如果连续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我需要分析现有的数据集,有没有插入触发 –

您可以识别行组依次计算不超过阈值的值的数量。对于超过阈值的序列,这是不变的。剩下的只是聚合:

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 ......计算不*超过阈值的数字。运行子查询以查看它分配给行的数量。 –