在SQL中用给定的过滤器宽度查找连续序列

问题描述 投票:0回答:1

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

例如,过滤后的表格由3,4,5,6,9,10,13,16之类的索引组成,如果我应用宽度为3的过滤器,则在两种情况下信号都是错误的,如索引序列3,4,54,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)

谢谢。

mysql sql pattern-matching sequence gaps-and-islands
1个回答
0
投票
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;

fiddle

© www.soinside.com 2019 - 2024. All rights reserved.