Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сумма группировок периодов / 9 сообщений из 9, страница 1 из 1
13.05.2021, 09:22
    #40069860
maverick2104
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма группировок периодов
Добрый день,
Есть задачка по работе, дайте совет пожалуйста как проще всего решить.
тест таблица
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with TEST as (
              select '25.10.2016 16:02:08' as ACTION_DATE , 'Transfer1' as ACTION_NAME , 'START' as STATE_NAME from dual union all
              select '25.10.2016 16:24:19' as ACTION_DATE , 'Transfer2' as ACTION_NAME , 'BACK' as STATE_NAME from dual union all
              select '26.10.2016 10:01:07' as ACTION_DATE , 'Transfer4' as ACTION_NAME , 'RISK' as STATE_NAME from dual union all
              select '28.10.2016 09:02:08' as ACTION_DATE , 'Transfer4' as ACTION_NAME , 'RISK' as STATE_NAME from dual union all
              select '28.10.2016 15:02:15' as ACTION_DATE , 'Transfer3' as ACTION_NAME , 'CONSUL' as STATE_NAME from dual union all
              select '03.11.2016 12:15:55' as ACTION_DATE , 'Transfer6' as ACTION_NAME , 'RISK' as STATE_NAME from dual union all
              select '03.11.2016 09:33:45' as ACTION_DATE , 'Transfer7' as ACTION_NAME , 'RISK' as STATE_NAME from dual union all
              select '10.11.2016 08:02:09' as ACTION_DATE , 'Transfer2' as ACTION_NAME , 'RISK_VERIFY' as STATE_NAME from dual union all
              select '10.11.2016 16:02:08' as ACTION_DATE , 'Transfer4' as ACTION_NAME , 'CONSUL' as STATE_NAME from dual union all
              select '11.11.2016 17:23:37' as ACTION_DATE , 'Transfer7' as ACTION_NAME , 'CONSUL' as STATE_NAME from dual union all
              select '12.11.2016 11:12:56' as ACTION_DATE , 'Transfer8' as ACTION_NAME , 'CONSUL' as STATE_NAME from dual union all
              select '13.11.2016 14:02:08' as ACTION_DATE , 'Transfer3' as ACTION_NAME , 'RISK' as STATE_NAME from dual union all
              select '20.11.2016 15:42:09' as ACTION_DATE , 'Transfer4' as ACTION_NAME , 'RISK' as STATE_NAME from dual union all
              select '23.11.2016 10:18:35' as ACTION_DATE , 'Transfer9' as ACTION_NAME , 'FINISH' as STATE_NAME from dual 
             )
 select * from TEST




ACTION_DATE = Дата перехода
STATE_NAME = Статус обьекта

Задача посчитать сколько времени (дней,минуты,секунды) обьект находился в определенным статусе, например 'RISK' .

Пока что в голову лезет только lead и lag, смотреть дату изменения и через цикл посчитать все периоды, но мне кажется я слишком заморачиваюсь.

Поделитесь опытом пожалуйста.
Спасибо.
...
Рейтинг: 0 / 0
13.05.2021, 09:25
    #40069862
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма группировок периодов
maverick2104
через цикл посчитать все периоды
Вместо цикла использовать агрегацию.
...
Рейтинг: 0 / 0
13.05.2021, 10:53
    #40069912
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма группировок периодов
maverick2104


Задача посчитать сколько времени (дней,минуты,секунды) обьект


ид обьекта, какое поле?

.....
stax
...
Рейтинг: 0 / 0
13.05.2021, 11:10
    #40069918
maverick2104
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма группировок периодов
Stax

ид обьекта, какое поле?

Тут 1 обьект, это история изменений статуса одного обьекта.
...
Рейтинг: 0 / 0
13.05.2021, 11:31
    #40069931
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма группировок периодов
maverick2104,

lead+group by

что не получается?

.....
stax
...
Рейтинг: 0 / 0
13.05.2021, 11:51
    #40069936
maverick2104
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма группировок периодов
Stax,

Можете пример дать? Не совсем понимаю как расчитать разницу времени с group by.
...
Рейтинг: 0 / 0
13.05.2021, 12:14
    #40069947
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма группировок периодов
maverick2104,
Код: 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.
with TEST as (
              select 1 obj_id,'25.10.2016 16:02:08' as ACTION_DATE , 'Transfer1' as ACTION_NAME , 'START' as STATE_NAME from dual union all
              select 1,'25.10.2016 16:24:19' as ACTION_DATE , 'Transfer1' as ACTION_NAME , 'BACK' as STATE_NAME from dual union all
              select 1,'26.10.2016 10:01:07' as ACTION_DATE , 'Transfer1' as ACTION_NAME , 'RISK' as STATE_NAME from dual union all
              select 1,'28.10.2016 09:02:08' as ACTION_DATE , 'Transfer1' as ACTION_NAME , 'RISK' as STATE_NAME from dual union all
              select 1,'28.10.2016 15:02:15' as ACTION_DATE , 'Transfer1' as ACTION_NAME , 'CONSUL' as STATE_NAME from dual union all
              select 1,'03.11.2016 12:15:55' as ACTION_DATE , 'Transfer1' as ACTION_NAME , 'RISK' as STATE_NAME from dual union all
              select 1,'03.11.2016 09:33:45' as ACTION_DATE , 'Transfer1' as ACTION_NAME , 'RISK' as STATE_NAME from dual union all
              select 1,'10.11.2016 08:02:09' as ACTION_DATE , 'Transfer2' as ACTION_NAME , 'RISK_VERIFY' as STATE_NAME from dual union all
              select 1,'10.11.2016 16:02:08' as ACTION_DATE , 'Transfer2' as ACTION_NAME , 'CONSUL' as STATE_NAME from dual union all
              select 1,'11.11.2016 17:23:37' as ACTION_DATE , 'Transfer2' as ACTION_NAME , 'CONSUL' as STATE_NAME from dual union all
              select 1,'12.11.2016 11:12:56' as ACTION_DATE , 'Transfer2' as ACTION_NAME , 'CONSUL' as STATE_NAME from dual union all
              select 1,'13.11.2016 14:02:08' as ACTION_DATE , 'Transfer2' as ACTION_NAME , 'RISK' as STATE_NAME from dual union all
              select 1,'20.11.2016 15:42:09' as ACTION_DATE , 'Transfer2' as ACTION_NAME , 'RISK' as STATE_NAME from dual union all
              select 1,'23.11.2016 10:18:35' as ACTION_DATE , 'Transfer2' as ACTION_NAME , 'FINISH' as STATE_NAME from dual union all
--
              select 2,'25.10.2016 16:02:08' as ACTION_DATE , 'Transfer1' as ACTION_NAME , 'START' as STATE_NAME from dual union all
              select 2,'25.10.2016 16:24:19' as ACTION_DATE , 'Transfer1' as ACTION_NAME , 'BACK' as STATE_NAME from dual union all
              select 2,'26.10.2016 10:01:07' as ACTION_DATE , 'Transfer1' as ACTION_NAME , 'RISK' as STATE_NAME from dual union all
              select 2,'26.10.2016 10:01:08' as ACTION_DATE , 'Transfer1' as ACTION_NAME , 'RISK' as STATE_NAME from dual
             )
,t as (select test.*,to_date(ACTION_DATE,'dd.mm.yyyy hh24:mi:ss') ad from test)
,tt as (
 select 
  t.*
  ,lead(AD,1,sysdate) over (partition by obj_id order by AD) l_ad
 from t
 --order by obj_id, AD
)
select obj_id,sum(l_ad-ad) s_dn --в днях
from tt where STATE_NAME='RISK'
group by obj_id
/
SQL> /

    OBJ_ID       S_DN
---------- ----------
         1 18.9902662
         2 1660.09171


.....
stax
...
Рейтинг: 0 / 0
13.05.2021, 12:29
    #40069957
maverick2104
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма группировок периодов
Stax,
Я рыл вообще в другом направлении.
Как же все легко то оказалось, это гениально. Спасибо Вам.
...
Рейтинг: 0 / 0
13.05.2021, 13:00
    #40069959
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма группировок периодов
maverick2104
Как же все легко то оказалось, это гениально.
RTFM pattern matching. Обоим
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сумма группировок периодов / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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