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
您可以识别行组依次计算不超过阈值的值的数量。对于超过阈值的序列,这是不变的。剩下的只是聚合:
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;
这比写一个程序略微整洁 –
戈登,你能说出为什么我们总结使用少于或等于(案例...?值必须高于要计数的阈值 –
@KirillDrozdov ......计算不*超过阈值的数字。运行子查询以查看它分配给行的数量。 –
如果您的数据库引擎有触发器,请使用它。在插入时触发,只需编写所需的sql来获取记录。然后在where子句中测试是否超出允许范围 - 如果得到任何结果,则不符合“10行”标准。 – radarbob
@radarbob我需要分析现有的数据集,有没有插入触发 –