Как запросить пробелы и перечислить нижние / верхние границы пробела в SQLite? - PullRequest
0 голосов
/ 21 января 2019

Я борюсь с перечислением пробелов, включая их нижнюю и верхнюю границы, в простой таблице SQLite.

Таблица:

id

1

2

5

6

8

То, что я хочу, - это результат типа (cnt считает недостающие целые числа):

lb ub cnt

2 5 2

6 8 1

Я уже нашел пробелы, но не знаю, как соединить верхнюю и нижнюю границы и сосчитать недостающиецелые числа:

SELECT id ИЗ таблицы mo, ГДЕ НЕ СУЩЕСТВУЕТ (SELECT NULL FROM сообщений mi, ГДЕ mi._id = mo._id + 1) ORDER BY id

Замена условия на -1 Я получаюдругие границы.

Ответы [ 2 ]

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

Похоже на прямую проблему разрывов и островков.

CREATE TABLE test(id INTEGER PRIMARY KEY);
INSERT INTO test VALUES (1), (2), (5), (6), (8);
WITH ranges AS (SELECT id AS lb, lead(id, 1) OVER (ORDER BY id) AS ub FROM test) 
SELECT lb, ub, ub - lb - 1 AS cnt FROM ranges WHERE ub - lb > 1;

дает

lb          ub          cnt       
----------  ----------  ----------
2           5           2         
6           8           1     

(Примечание: для вышеперечисленного требуется Sqlite 3.25 или новее)

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

Вы должны получить пробелы с помощью подзапроса:

select t.id lb, t.next ub, (t.next - t.id - 1) cnt from (
  select 
    id, 
    (select min(id) from tablename where t.id < id) next
  from tablename t
  ) t
where t.next is not null and t.next - t.id > 1 

См. Демоверсию

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