Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сгруппировать соседние даты / 4 сообщений из 4, страница 1 из 1
16.09.2020, 09:10
    #39999185
Максим Н
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать соседние даты
Есть последовательность дат:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with dates as (
  select to_date('2020-09-12', 'yyyy-mm-dd') as dat union
  select to_date('2020-09-13', 'yyyy-mm-dd') as dat union
  select to_date('2020-09-18', 'yyyy-mm-dd') as dat union
  select to_date('2020-09-19', 'yyyy-mm-dd') as dat union
  select to_date('2020-09-20', 'yyyy-mm-dd') as dat union
  select to_date('2020-09-26', 'yyyy-mm-dd') as dat union
  select to_date('2020-09-27', 'yyyy-mm-dd') as dat)
select dat
  from dates
 order by dat




Нужно сгруппировать соседние, т.е. чтобы получилось примерно такое:

Дата Дата старта группы Номер в группе12.09.2020 12.09.2020 113.09.2020 12.09.2020 218.09.2020 18.09.2020 119.09.2020 18.09.2020 220.09.2020 18.09.2020 326.09.2020 26.09.2020 127.09.2020 26.09.2020 2
...
Рейтинг: 0 / 0
16.09.2020, 11:04
    #39999234
Cristiano_Rivaldo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать соседние даты
Максим Н,
Рекурсивным запросом проще всего. Измываться через оконные/аналитические функции наверное будет сложновато
...
Рейтинг: 0 / 0
17.09.2020, 14:13
    #39999803
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать соседние даты
Максим Н,

Группировка по разности dat и row_number-а
...
Рейтинг: 0 / 0
18.09.2020, 19:19
    #40000371
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать соседние даты
Максим Н,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with dates as (
  select to_date('2020-09-12', 'yyyy-mm-dd') as dat union
  select to_date('2020-09-13', 'yyyy-mm-dd') as dat union
  select to_date('2020-09-18', 'yyyy-mm-dd') as dat union
  select to_date('2020-09-19', 'yyyy-mm-dd') as dat union
  select to_date('2020-09-20', 'yyyy-mm-dd') as dat union
  select to_date('2020-09-26', 'yyyy-mm-dd') as dat union
  select to_date('2020-09-27', 'yyyy-mm-dd') as dat)
--
--
select dat
     , min(dat) over(partition by grp_id) as date_begin
     , row_number() over(partition by grp_id order by dat) as rn
  from (
         select dat
              , dat - row_number() over(order by dat)::int as grp_id
           from dates
       ) v
 order by dat

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


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