powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Найти "пробелы" интервалов
2 сообщений из 2, страница 1 из 1
Найти "пробелы" интервалов
    #40059103
про герр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть табличка со значениями начала и окончания периодов/интервалов,
при неразрывности, начало следующего интервала совпадает с концом предыдущего:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
start    end
0	  10
10	  20
20	  30
-- пробел (30-40)
40	  50
50	  60
60	  70
-- пробел (70-90)
90	  100
100	  110
110	  120
-- пробел (120-150)
150	  160
160	  170
Нужно получить записи "вокруг" пробелов
Код: plaintext
1.
2.
3.
4.
5.
6.
20	  30
40	  50
60	  70
90	  100
110	  120
150	  160
Через LEFT OUTER JOIN
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH "ends" AS 
(
SELECT * FROM "TestDirections"
)

SELECT 
"TestDirections"."start", 
"TestDirections"."end"
FROM "TestDirections"
LEFT OUTER JOIN "ends"
ON "TestDirections"."end" = "ends"."start"
WHERE "ends"."end" IS NULL


Выдает только "верхний" предел отсутствующего интервала.
Код: plaintext
1.
2.
3.
20	30
60	70
110	120
160	170

Как добавить в результат еще и "нижний" предел"?
...
Рейтинг: 0 / 0
Найти "пробелы" интервалов
    #40074175
Murderface_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Вариант.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
WITH cte AS (
			SELECT		*
			FROM		(VALUES
						(0,10),
						(10,20),
						(20,30),
						-- пробел (30-40)
						(40,50),
						(50,60),
						(60,70),
						-- пробел (70-90)
						(90,100),
						(100,110),
						(110,120),
						-- пробел (120-150)
						(150,160),
						(160,170)) AS foo("start", "end"))
SELECT		"start",
			"end"
FROM		(
			SELECT		*,
						LAG("end") OVER(ORDER BY "start") AS p,
						LEAD("start") OVER(ORDER BY "end") AS n
			FROM		cte) AS a
WHERE		"start" <> p
			OR "end" <> n;


...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Найти "пробелы" интервалов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]