mysql - 在 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)
谢谢你。
解决方案
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;
推荐阅读
- c# - Jenkins 只构建改变而不是整个解决方案的项目
- javascript - ng-model 值中的 AngularJS 日期未传递给控制器
- themes - 在 CentOS 中,Virtualbox 无缝模式如何去除 Windows 上的阴影效果?
- python - 如何在条形图中每个条形顶部的 y 变量的值?
- c# - 如何将数据发布到asp.net核心后面的剃须刀页面代码
- msbuild - 改变 usql msbuild 目标
- selenium-webdriver - 如何找到父元素如果我不知道子元素和父元素之间存在的元素数量
- microservices - Eureka 和 Feign MicroWebservice 无法启动
- ruby - 使用 Chef 为不同的 Windows 用户设置环境变量
- server-sent-events - SpringWebFlux 用于 POST 数据的 JavaScript 客户端