首页 > 解决方案 > 在 SQL 中查找具有给定过滤器宽度的连续序列

问题描述

我使用 MYSQL 存储在给定时间段内采样的信号。我的任务涉及根据滤波器宽度识别故障信号。信号表由信号索引及其值组成。在初级过滤期间,我能够获得不匹配的序列的索引。过滤表现在包含不匹配的信号索引。现在,我想计算信号出现故障时的实例数。

例如,过滤后的表由索引组成3,4,5,6,9,10,13,16,如果我应用宽度为 3 的过滤器,那么有两个实例表明信号有故障,如索引序列3,4,5和所示4,5,6。如果我应用宽度为 2 的过滤器,那么同样有 4 个实例。

我想通过对包含这些索引的表使用 sql 查询来计算这一点。现在,这就是我正在为过滤器宽度为 2 所做的事情。

SELECT COUNT(*) FROM table_index AS t1 INNER JOIN table_index AS t2 WHERE t1.id+1=t2.id;

但是这种方法非常昂贵,当应用 3 或更大的过滤器宽度时,因为需要在这么多表上使用内部连接。有没有只使用 SQL 查询的有效方法?还是我需要通过其他方式读取这些索引来进行这些分析?(例如:使用 python)

谢谢你。

标签: mysqlsqlpattern-matchingsequencegaps-and-islands

解决方案


SELECT t1.id as starting_id
FROM test t1
JOIN test t2 ON t1.id BETWEEN t2.id - @filter_count + 1 AND t2.id
GROUP BY t1.id
HAVING COUNT(*) = @filter_count;

小提琴


推荐阅读