SQL-запрос перекрытия - PullRequest
0 голосов
/ 22 марта 2019

Скажем, у меня есть таблица с двумя столбцами X1 и X2, где X1 всегда меньше, чем X2.Каждый ряд составляет некоторый диапазон (X1, X2).Возможно, что несколько строк перекрывают диапазоны X1 / X2, чтобы увеличить диапазон (X1n, X2m).

Существует ли способ запроса с использованием стандартного SQL для нахождения всех этих диапазонов?

Например, таблица может выглядеть следующим образом:

|x1         |x2       |
-----------------------
|1          |3        |
|2          |4        |
|3          |5        |
|7          |9        |
|8          |27       |
|100        |105      |
-----------------------

Ожидаемый результат будет:

((1, 5), (7, 27), (100, 105))

Я ценю любую помощь наших очков в правильном направлении.

Я использую sqlite 3.11.0.

1 Ответ

2 голосов
/ 22 марта 2019

Попробуйте:

SELECT 
t1.x1  AS Start,
MIN(t2.x2) AS End
FROM test t1 
INNER JOIN test t2 ON t1.x1 <= t2.x2
      AND NOT EXISTS(SELECT * FROM test t3 
                     WHERE t2.x2 >= t3.x1 AND t2.x2 < t3.x2) 
WHERE NOT EXISTS(SELECT * FROM test t4 
                 WHERE t1.x1 > t4.x1 AND t1.x1 <= t4.x2) 
GROUP BY t1.x1 

Демонстрация здесь

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