powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Прошу помочь с иерархическим запросом
20 сообщений из 20, страница 1 из 1
Прошу помочь с иерархическим запросом
    #39472849
noobb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго всем дня!
Помогите пожалуйста заселектить
Есть
1 Событие1 01.01.2017 12:00:00
2 Событие2 01.01.2017 12:00:15
3 Событие3 01.01.2017 12:01:05
4 Событие1 01.01.2017 13:01:05
5 Событие3 01.01.2017 13:02:00

Нужно
Событие1 01.01.2017 12:00:00 01.01.2017 12:01:05
Событие1 01.01.2017 13:01:05 01.01.2017 13:02:00
Т.е необходимо как бы приджойнить к событию1 дату от события 3
Заранее благодарю
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39472853
noobb,

а почему именно к событию "один" и от события "три"?
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39472858
coborhc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
noobb,
да, как-то связь не улавливается...
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39472860
noobb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

Нужно посчитать сколько время прошло от события 1 до события 3...
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39472864
coborhc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
noobb,

что-то вроде такого?

Код: plsql
1.
2.
3.
4.
5.
6.
select
  event_type,
  event_time,
  (select min(event_time) from event_table where event_type = 'Событие3' and event_time > a.event_time) as event_time3
  from event_table a
  where event_type = 'Событие1'
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39472873
kernA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noobb,

вам нужно посчитать интервалы времени между двумя ближайшими событиями и приписать значение к стартовому?
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39472874
noobb,

а при чем тут иерархия? обычный where собитие in (1,3) + lead/lag на анализ последовательно идущих строк с событиями 1 и 3. далее тот же lead/lag для получения значений разности времени
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39472876
noobbТ.е необходимо как бы приджойнить к событию1 дату от события 3
Заранее благодарю
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
SQL> with
  2      src (id, action, dt) as
  3      (
  4          select
  5              regexp_substr(str, '^\s*(\d+)', 1, level, 'm', 1),
  6              regexp_substr(str, '^\s*\d+\s+(\S+)', 1, level, 'm', 1),
  7              to_date(regexp_substr(str, '^\s*\d+\s+\S+\s+(\d{2}.\d{2}.\d{4}\s+\d{2}:\d{2}:\d{2})', 1, level, 'm', 1), 'dd.mm.yyyy hh24:mi:ss')
  8          from(
  9              select
 10                  '1 Событие1 01.01.2017 12:00:00
 11                  2 Событие2 01.01.2017 12:00:15
 12                  3 Событие3 01.01.2017 12:01:05
 13                  4 Событие1 01.01.2017 13:01:05
 14                  5 Событие3 01.01.2017 13:02:00' str
 15              from dual
 16          )
 17          connect by regexp_substr(str, '^\s*(\d+)', 1, level, 'm', 1) is not null
 18     )
 19  select
 20      action,
 21      to_char(action1_dt, 'HH24:MI:SS') action1_dt,
 22      to_char(action3_dt, 'HH24:MI:SS') action3_dt
 23  from src
 24  match_recognize
 25  (
 26       order by dt
 27       measures
 28           action1.action action,
 29           action1.dt action1_dt,
 30           action3.dt action3_dt
 31       one row per match
 32       pattern (action1 action2? action3)
 33       define
 34            action1 as action1.action = 'Событие1',
 35            action2 as action2.action = 'Событие2',
 36            action3 as action3.action = 'Событие3'
 37  )
 38  /
ACTION                                                                           ACTION1_DT ACTION3_DT
-------------------------------------------------------------------------------- ---------- ----------
Событие1                                                                         12:00:00   12:01:05
Событие1                                                                         13:01:05   13:02:00
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39472878
noobb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
coborhc,

Класс!)
Спасибо, друга
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39472884
noobb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

Сори, про иерархию затупил
Lead покурю, спасибо!
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39472885
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noobb,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
with q as (select 1 as a, 'Событие1' as b, to_date('01.01.2017 12:00:00','dd.mm.yyyy hh24:mi:ss') as c from dual union all
select 2, 'Событие2', to_date('01.01.2017 12:00:15','dd.mm.yyyy hh24:mi:ss') from dual union all
select 3, 'Событие3', to_date('01.01.2017 12:01:05','dd.mm.yyyy hh24:mi:ss') from dual union all
select 4, 'Событие1', to_date('01.01.2017 13:01:05','dd.mm.yyyy hh24:mi:ss') from dual union all
select 5, 'Событие3', to_date('01.01.2017 13:02:00','dd.mm.yyyy hh24:mi:ss') from dual)
, list as (select a, b, c, dense_rank() over (partition by b order by a) as d from q)
select * from list l1 join list l2 on l1.d=l2.d and l1.b = 'Событие1' and l2.b = 'Событие3'
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39472886
noobbcoborhc,

Класс!)
Спасибо, другавзлетит только на версии 12с. по используемому функционалу - это всё равно, что один колосок косить комбайном. Но в целом - дело вкуса...
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39472887
noobb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
рекогнайз рулит,

Ого
Огого
Факинщет
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39472889
Добрый Э - Эхnoobbcoborhc,

Класс!)
Спасибо, другавзлетит только на версии 12с. по используемому функционалу - это всё равно, что один колосок косить комбайном. Но в целом - дело вкуса...ответ был про решение от рекогнайз рулета
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39472935
Так лучше

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 19  select
 20      action,
 21      to_char(action1_dt, 'HH24:MI:SS') action1_dt,
 22      to_char(action3_dt, 'HH24:MI:SS') action3_dt
 23  from src
 24  match_recognize
 25  (
 26       order by dt
 27       measures
 28           action1.action action,
 29           action1.dt     action1_dt,
 30           action3.dt     action3_dt
 31       one row per match
 32       pattern (action1 other*? action3)
 33       define
 34            action1 as action1.action = 'Событие1',
 35            action3 as action3.action = 'Событие3'
 36  )
 37  /
ACTION                                                                           ACTION1_DT ACTION3_DT
-------------------------------------------------------------------------------- ---------- ----------
Событие1                                                                         12:00:00   12:01:05
Событие1                                                                         13:01:05   13:02:00
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39473000
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noobb,

допустимо ли?

1 Событие1
2 Событие1
3 Событие2
4 Событие3
5 Событие4
6 Событие3
7 Событие3

.....
stax
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39473023
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noobb,
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
  1  with
  2        src (id, action, dt) as
  3       (
  4            select
  5               regexp_substr(str, '^\s*(\d+)', 1, level, 'm', 1),
  6                regexp_substr(str, '^\s*\d+\s+(\S+)', 1, level, 'm', 1),
  7                to_date(regexp_substr(str,
  8  '^\s*\d+\s+\S+\s+(\d{2}.\d{2}.\d{4}\s+\d{2}:\d{2}:\d{2})'
  9  , 1, level, 'm', 1), 'dd.mm.yyyy hh24:mi:ss')
 10            from(
 11                select
 12                    '1 Событие1 01.01.2017 12:00:00
 13                    2 Событие2 01.01.2017 12:00:15
 14                    3 Событие3 01.01.2017 12:01:05
 15                    4 Событие1 01.01.2017 13:01:05
 16                    5 Событие3 01.01.2017 13:02:00' str
 17                from dual
 18            )
 19            connect by regexp_substr(str, '^\s*(\d+)', 1, level, 'm', 1)
 20  is not null
 21       )
 22  select * from (
 23    select t.*
 24   ,first_value(decode(action,'Событие3',dt) ignore nulls)
 25    over (order by dt rows between current row and unbounded following) d3
 26    from src t
 27* ) where action='Событие1'
SQL> /

ID    ACTION          DT                  D3
----- --------------- ------------------- -------------------
1     Событие1        01.01.2017 12:00:00 01.01.2017 12:01:05
4     Событие1        01.01.2017 13:01:05 01.01.2017 13:02:00



......
stax
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39473053
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

А чего через lead не написать как предлагал Добрый Э - Эх

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with q as (
select 1 as a, 'Событие1' as b, to_date('01.01.2017 12:00:00','dd.mm.yyyy hh24:mi:ss') as c from dual union all
select 2, 'Событие2', to_date('01.01.2017 12:00:15','dd.mm.yyyy hh24:mi:ss') from dual union all
select 3, 'Событие3', to_date('01.01.2017 12:01:05','dd.mm.yyyy hh24:mi:ss') from dual union all
select 4, 'Событие1', to_date('01.01.2017 13:01:05','dd.mm.yyyy hh24:mi:ss') from dual union all
select 5, 'Событие3', to_date('01.01.2017 13:02:00','dd.mm.yyyy hh24:mi:ss') from dual)


select a, b, Event1_Date, to_char(Event3_Date, 'DD.MM.YYYY HH24:MI:SS') Event3_Date 
  from (
         select a,b,to_char(c, 'DD.MM.YYYY HH24:MI:SS') Event1_Date, decode(lead(B) over(order by c),'Событие3',lead(C) over(order by c)) Event3_Date 
           from q 
          where b in ('Событие1', 'Событие3')
) where b = 'Событие1'
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39473168
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with q as (
select 1 as a, 'Событие1' as b, to_date('01.01.2017 12:00:00','dd.mm.yyyy hh24:mi:ss') as c from dual union all
select 2, 'Событие2', to_date('01.01.2017 12:00:15','dd.mm.yyyy hh24:mi:ss') from dual union all
select 3, 'Событие3', to_date('01.01.2017 12:01:05','dd.mm.yyyy hh24:mi:ss') from dual union all
select 4, 'Событие1', to_date('01.01.2017 13:01:05','dd.mm.yyyy hh24:mi:ss') from dual union all
select 5, 'Событие3', to_date('01.01.2017 13:02:00','dd.mm.yyyy hh24:mi:ss') from dual)

select distinct
          case when b = 'Событие3' then lag(a) over (order by a) else a end as a
        , case when b = 'Событие3' then lag(b) over (order by a) else b end as b
        , case when b = 'Событие3' then lag(c) over (order by a) else c end as c
        , case when b = 'Событие3' then c else lead(c) over (order by a) end as d
  from q 
 where q.b in ('Событие1','Событие3')
...
Рейтинг: 0 / 0
Прошу помочь с иерархическим запросом
    #39473227
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo,

Ну тут есть 2 вопроса
1. сортировать по "order by a" наверно не очень правильно, может быть рассинхрон по времени и ID (a)
2. если стоят рядом два Событие1 и два Событие3 Ваш запрос начнет безбожно врать
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Прошу помочь с иерархическим запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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