powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / daterange && daterange объединить пересекающие и соприкасающиеся интервалы в один
1 сообщений из 26, страница 2 из 2
daterange && daterange объединить пересекающие и соприкасающиеся интервалы в один
    #38789235
На всякий случай и сюда "кросс-платформенное" решение продублирую.
Тестовые данные:
ID min$ max$77777 1 377777 2 477777 3 577777 4 677777 11 1377777 12 1477777 13 1577777 14 1688888 1 388888 2 488888 3 588888 4 688888 21 2388888 22 2488888 23 2588888 24 26
Код: vbnet
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.
27.
28.
29.
30.
31.
32.
33.
--
-- Непосредственно сам запрос:
select v_begin.id, max(v_begin.min$) as b_num, v_end.max$  as e_num
  from 
       ( -- Находим все начала диапазонов:
          select min$, id
            from t s1
           where not exists (
                               select null
                                 from t s2
                                where s2.min$ < s1.min$
                                  and s2.max$ > s1.min$
                                  and s1.id = s2.id
                            )
       ) v_begin
  join 
       ( -- Находим все кончала диапазонов:
          select max$, id
            from t s1
           where not exists (
                               select null
                                 from t s2
                                where s2.max$ > s1.max$
                                  and s2.min$ < s1.max$
                                  and s1.id = s2.id
                            )
       ) v_end
--
-- Сливаем начала с кончалами:
    on v_begin.min$ < v_end.max$
    and v_begin.id = v_end.id
 group by v_begin.id, v_end.max$
 order by 1, 2


Результат выполнения:
ID b_num e_num7777716 777771116 8888816 888882126
...
Рейтинг: 0 / 0
1 сообщений из 26, страница 2 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / daterange && daterange объединить пересекающие и соприкасающиеся интервалы в один
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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