Проверьте для определенной последовательности в sqlite3 - PullRequest
0 голосов
/ 21 января 2019

Я хочу найти конкретную последовательность вхождений в базе данных. Пример: рассмотрим следующую таблицу:

enter image description here

Подумайте, я хочу проверить, имеет ли таблица следующую последовательность или нет: 555 222 444 . Я хочу показать, где последовательность не совпадает как:

enter image description here

Как я могу это сделать?

1 Ответ

0 голосов
/ 21 января 2019

Оконные функции (добавлены в Sqlite 3.25, поэтому требуется следующая версия или более новая версия) облегчают просмотр следующего ряда:

Создание и заполнение образца таблицы (публикация изображения ваших данных действительно бесполезна; лучше всего использовать текст с инструкциями INSERT или CSV):

CREATE TABLE seq(num INTEGER PRIMARY KEY, value INTEGER);
INSERT INTO seq VALUES (1, 111), (2, 555), (3, 222), (4, 444), (5, 333)
                     , (6, 111), (7, 555), (8, 222), (9, 111), (10, 333)
                     , (11, 555), (12, 444), (13, 111), (14, 333), (15, 444);

И запрос:

WITH leads AS (SELECT num, value
                    , lead(value, 1) OVER (ORDER BY num) AS next1
                    , lead(value, 2) OVER (ORDER BY num) AS next2
               FROM seq)
SELECT CASE WHEN next1 = 222 AND next2 = 444 THEN 'MATCH' ELSE 'FAIL' END AS result
     , num AS start
     , CASE WHEN next1 = 222 AND next2 = 444 THEN num + 2 ELSE num + 1 END AS "end"
FROM leads
WHERE value = 555
ORDER BY num;

производит

result      start       end       
----------  ----------  ----------
MATCH       2           4         
FAIL        7           8         
FAIL        11          12  

(все вышеперечисленное предполагает, что вы используете столбец num для определения порядка)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...