Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Прошу помочь с иерархическим запросом / 20 сообщений из 20, страница 1 из 1
16.06.2017, 09:30
    #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
16.06.2017, 09:36
    #39472853
Прошу помочь с иерархическим запросом
noobb,

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

Нужно посчитать сколько время прошло от события 1 до события 3...
...
Рейтинг: 0 / 0
16.06.2017, 09:45
    #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
16.06.2017, 09:55
    #39472873
kernA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помочь с иерархическим запросом
noobb,

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

а при чем тут иерархия? обычный where собитие in (1,3) + lead/lag на анализ последовательно идущих строк с событиями 1 и 3. далее тот же lead/lag для получения значений разности времени
...
Рейтинг: 0 / 0
16.06.2017, 09:57
    #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
16.06.2017, 09:58
    #39472878
noobb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помочь с иерархическим запросом
coborhc,

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

Сори, про иерархию затупил
Lead покурю, спасибо!
...
Рейтинг: 0 / 0
16.06.2017, 10:01
    #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
16.06.2017, 10:01
    #39472886
Прошу помочь с иерархическим запросом
noobbcoborhc,

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

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

Класс!)
Спасибо, другавзлетит только на версии 12с. по используемому функционалу - это всё равно, что один колосок косить комбайном. Но в целом - дело вкуса...ответ был про решение от рекогнайз рулета
...
Рейтинг: 0 / 0
16.06.2017, 10:44
    #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
16.06.2017, 11:33
    #39473000
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помочь с иерархическим запросом
noobb,

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

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

.....
stax
...
Рейтинг: 0 / 0
16.06.2017, 11:48
    #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
16.06.2017, 12:19
    #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
16.06.2017, 14:31
    #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
16.06.2017, 15:44
    #39473227
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помочь с иерархическим запросом
Dshedoo,

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


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