powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Привязка дочерних записей к родительским при сортировке
13 сообщений из 13, страница 1 из 1
Привязка дочерних записей к родительским при сортировке
    #39266380
arCHi_1887
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть селект, который возвращает данные по мероприятиям. У каждого мероприятия есть дата начала и окончания, есть дочерние мероприятия, их интервал не обязательно совпадает с интервалом родительского, но не может выходить за рамки родительского.
Необходимо отсортировать записи в виде:

Интервал Наименование Дочернее мероприятие ID OWNER_ID08-00 - 11-00 М1 нет 1 10-00 - 10-30 М2 нет 2 11-00 - 15-00 М3 нет 3 11-00 - 12-00 Д1 да 4 313-30 - 14-00 Д2 да 5 312-00 - 13-00 М4 нет 6

То есть отсортировать по времени начала, но при этом Дочерние мероприятия должны быть привязаны к своему родительскому (идти сразу после него).

Сейчас сортирую так:
Код: plsql
1.
order by date_start, nvl(owner_id, id), /*Родительский или нет*/decode(owner_id, null, 0, 1)



Но при таком способе - если какое-то 2-е родительское будет начинаться раньше одного из дочерних 1-го родительского - 2-е родительское вклиниться между дочерними записями 1-го, а такого быть не должно.

Как реализовать?
...
Рейтинг: 0 / 0
Привязка дочерних записей к родительским при сортировке
    #39266420
arCHi_1887,

with и результат.
...
Рейтинг: 0 / 0
Привязка дочерних записей к родительским при сортировке
    #39266423
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arCHi_1887,

иерархический запрос + connect_by_root
...
Рейтинг: 0 / 0
Привязка дочерних записей к родительским при сортировке
    #39266448
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,
а чего просто не order siblings by

ps кстати давно не видно было))) куда пропадал?)
...
Рейтинг: 0 / 0
Привязка дочерних записей к родительским при сортировке
    #39266495
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vint,

Да как-то получилось так, что то время, которое раньше отводил для чтения этого форума, теперь отвожу для баловства с другими технологиями. А так, по-прежнему, на работе Oracle - мой основной рабочий инструмент, и поэтому изредка сюда все же заглядываю.
...
Рейтинг: 0 / 0
Привязка дочерних записей к родительским при сортировке
    #39266519
arCHi_1887
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Окей, написал так:
Код: plsql
1.
2.
connect by prior id = parent_id
order siblings by date_start



Все ок, но повились дубликаты у которых данные одинаковые, но разный level.
Исключил их так:
Код: plsql
1.
where not (level = 1 and owner_id is not null)



Как их нормально исключить, не используя where ?
...
Рейтинг: 0 / 0
Привязка дочерних записей к родительским при сортировке
    #39266520
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arCHi_1887,

start with owner_id is null
...
Рейтинг: 0 / 0
Привязка дочерних записей к родительским при сортировке
    #39266525
arCHi_1887
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Egoр,

найс, спасибо
...
Рейтинг: 0 / 0
Привязка дочерних записей к родительским при сортировке
    #39266555
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arCHi_1887,

на таких данных с иерархией корень-лист можно и так:

Код: plsql
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.
alter session set nls_date_format = 'hh24-mi';

with pretest as (
    select 8 start_time, 11 end_time, 'P1' name, 1 id, null owner_id from dual
      union all
    select 10 start_time, 10.5 end_time, 'P2' name, 2 id, null owner_id from dual
      union all
    select 11 start_time, 15 end_time, 'P3' name, 3 id, null owner_id from dual
      union all
    select 11 start_time, 12 end_time, 'D1' name, 4 id, 3 owner_id from dual
      union all
    select 13.5 start_time, 14 end_time, 'D2' name, 5 id, 3 owner_id from dual
      union all
    select 12 start_time, 13 end_time, 'P4' name, 6 id, null owner_id from dual
  ), test as (
    select trunc(sysdate) + start_time / 24 start_date 
         , trunc(sysdate) + end_time / 24 end_date 
         , name, id, owner_id
      from pretest
  )
----/\--- sample data ----/\---
select start_date, end_date, name, id, owner_id
     , first_value( decode( owner_id, null, start_date ) ) over( partition by nvl(owner_id, id) order by start_date ) owner_start_date
  from test
 order by owner_start_date, owner_id nulls first, start_date, end_date
...
Рейтинг: 0 / 0
Привязка дочерних записей к родительским при сортировке
    #39266590
Фотография JaRo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
suPPLer,

только всё-таки
Код: plsql
1.
.. nvl(owner_id, id), owner_id nulls first ..

...
...
Рейтинг: 0 / 0
Привязка дочерних записей к родительским при сортировке
    #39266606
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaRo,

долго думал, не понял, что именно Вы предлагаете дополнить -- partition by функции или order by запроса.

Вижу, что first_value избыточна:
Код: plsql
1.
     , max( decode( owner_id, null, start_date ) ) over( partition by nvl(owner_id, id) ) owner_start_date
...
Рейтинг: 0 / 0
Привязка дочерних записей к родительским при сортировке
    #39266630
Фотография JaRo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
suPPLer,

в кляузе order by селекта. Мероприятия они такие - одновременно в разных местах запросто (родительские в смысле) :)
Код: plsql
1.
 order by owner_start_date, nvl(owner_id, id), owner_id nulls first, start_date, end_date
...
Рейтинг: 0 / 0
Привязка дочерних записей к родительским при сортировке
    #39266632
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaRo,

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


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