Поиск последовательных последовательностей с заданной шириной фильтра в SQL - PullRequest
0 голосов
/ 13 февраля 2020

Я использовал 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)

Спасибо.

1 Ответ

0 голосов
/ 13 февраля 2020
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;

скрипка

...