powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сумма группировок периодов
9 сообщений из 9, страница 1 из 1
Сумма группировок периодов
    #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
Сумма группировок периодов
    #40069862
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maverick2104
через цикл посчитать все периоды
Вместо цикла использовать агрегацию.
...
Рейтинг: 0 / 0
Сумма группировок периодов
    #40069912
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maverick2104


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


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

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

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

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

lead+group by

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

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

Можете пример дать? Не совсем понимаю как расчитать разницу времени с group by.
...
Рейтинг: 0 / 0
Сумма группировок периодов
    #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
Сумма группировок периодов
    #40069957
maverick2104
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,
Я рыл вообще в другом направлении.
Как же все легко то оказалось, это гениально. Спасибо Вам.
...
Рейтинг: 0 / 0
Сумма группировок периодов
    #40069959
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maverick2104
Как же все легко то оказалось, это гениально.
RTFM pattern matching. Обоим
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сумма группировок периодов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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