Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как посчитать разницу времени между несколькими датами / 10 сообщений из 10, страница 1 из 1
04.11.2021, 13:42
    #40109200
Bizkit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать разницу времени между несколькими датами
Добрый день.

Есть таблица следующего вида

wonum status changedate wostatusid
1014 WAPPR 2021-10-03 15:25:16 181
1014 APPR 2021-10-03 15:25:24 182
1014 INPRG 2021-10-03 15:26:45 183
1014 SLAHOLD 2021-10-03 15:29:33 184
1014 INPRG 2021-10-03 15:29:41 185
1014 SLAHOLD 2021-10-03 15:29:45 186
1014 INPRG 2021-10-03 15:43:40 187
1014 REJECT 2021-10-03 15:43:44 188
1014 CLOSE 2021-10-07 10:00:21 2723

wonum - это номер сущности у которой есть свой жизненный цикл. Данная сущность может сколь угодно раз быть в состоянии SLAHOLD. Из состояния SLAHOLD она может вернутся только в состояние INPRG. В состояние SLAHOLD она может перейти только из состояния INPRG. Подскажите пожалуйста, каким образом можно подсчитать время, которое сущность провела от начала жизненного цикла (статус WAPPR) до конца жизненного цикла (статус CLOSE) исключая то время, которое сущность провела в состоянии SLAHOLD.

Спасибо.
...
Рейтинг: 0 / 0
04.11.2021, 13:49
    #40109201
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать разницу времени между несколькими датами
Как-то так: SUM(CASE WHEN LAG(status) != SLAHOLD THEN changedate-LAG(changedate))
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.11.2021, 15:28
    #40109228
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать разницу времени между несколькими датами
Bizkit
Добрый день.

Есть таблица следующего вида

wonum status changedate wostatusid
1014 WAPPR 2021-10-03 15:25:16 181
1014 APPR 2021-10-03 15:25:24 182
1014 INPRG 2021-10-03 15:26:45 183
1014 SLAHOLD 2021-10-03 15:29:33 184
1014 INPRG 2021-10-03 15:29:41 185
1014 SLAHOLD 2021-10-03 15:29:45 186
1014 INPRG 2021-10-03 15:43:40 187
1014 REJECT 2021-10-03 15:43:44 188
1014 CLOSE 2021-10-07 10:00:21 2723

wonum - это номер сущности у которой есть свой жизненный цикл. Данная сущность может сколь угодно раз быть в состоянии SLAHOLD. Из состояния SLAHOLD она может вернутся только в состояние INPRG. В состояние SLAHOLD она может перейти только из состояния INPRG. Подскажите пожалуйста, каким образом можно подсчитать время, которое сущность провела от начала жизненного цикла (статус WAPPR) до конца жизненного цикла (статус CLOSE) исключая то время, которое сущность провела в состоянии SLAHOLD.

Спасибо.


(CLOSE-WAPPR)-sum(SLAHOLD-lead(changedate)) +-2сек

зы
если не получается, я наберу данные (через with)

.....
stax
...
Рейтинг: 0 / 0
04.11.2021, 16:25
    #40109251
Bizkit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать разницу времени между несколькими датами
Stax,

Не получилось
...
Рейтинг: 0 / 0
04.11.2021, 16:31
    #40109254
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать разницу времени между несколькими датами
Давай ссылку на https://dbfiddle.uk/?rdbms=oracle_18 с твоей структурой, данными
и неудачной попыткой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.11.2021, 16:42
    #40109256
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать разницу времени между несколькими датами
Код: 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.
with t (wonum, status, changedate, wostatusid
) as ( select 1014, 'WAPPR', to_date('2021-10-03 15:25:16','yyyy-mm-dd hh24:mi:ss'), 181
from dual union all select 1014, 'APPR', to_date('2021-10-03 15:25:24','yyyy-mm-dd hh24:mi:ss'), 182
from dual union all select 1014, 'INPRG', to_date('2021-10-03 15:26:45','yyyy-mm-dd hh24:mi:ss'), 183
from dual union all select 1014, 'SLAHOLD', to_date('2021-10-03 15:29:33','yyyy-mm-dd hh24:mi:ss'), 184
from dual union all select 1014, 'INPRG', to_date('2021-10-03 15:29:41','yyyy-mm-dd hh24:mi:ss'), 185
from dual union all select 1014, 'SLAHOLD', to_date('2021-10-03 15:29:45','yyyy-mm-dd hh24:mi:ss'), 186
from dual union all select 1014, 'INPRG', to_date('2021-10-03 15:43:40','yyyy-mm-dd hh24:mi:ss'), 187
from dual union all select 1014, 'REJECT', to_date('2021-10-03 15:43:44','yyyy-mm-dd hh24:mi:ss'), 188
from dual union all select 1014, 'CLOSE', to_date('2021-10-07 10:00:21','yyyy-mm-dd hh24:mi:ss'), 2723
from dual)
, t1 as (
select t.*
     , lead(changedate,1,sysdate) over(partition by wonum order by changedate)-changedate  in_state
  from t
)
select wonum
     , sum(in_state) total_in_days
     , numToDsInterval(sum(in_state),'day') total_interval
     , sysdate at_date
  from t1
 where status <> 'SLAHOLD'
 group by wonum
;

     WONUM TOTAL_IN_DAYS TOTAL_INTERVAL                 AT_DATE
---------- ------------- ------------------------------ --------------------
      1014 32,0435300925 +000000032 01:02:41.000000000  04.11.2021 16:42:00

SQL>  
...
Рейтинг: 0 / 0
04.11.2021, 17:30
    #40109285
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать разницу времени между несколькими датами
del
...
Рейтинг: 0 / 0
04.11.2021, 17:48
    #40109291
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать разницу времени между несколькими датами
Stax
del
не так отнял
le-changedate


Вам уже ответели

но раз обещал, то
Код: 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.
with t (wonum, status, changedate, wostatusid
) as ( select 1014, 'WAPPR', to_date('2021-10-03 15:25:16','yyyy-mm-dd hh24:mi:ss'), 181
from dual union all select 1014, 'APPR', to_date('2021-10-03 15:25:24','yyyy-mm-dd hh24:mi:ss'), 182
from dual union all select 1014, 'INPRG', to_date('2021-10-03 15:26:45','yyyy-mm-dd hh24:mi:ss'), 183
from dual union all select 1014, 'SLAHOLD', to_date('2021-10-03 15:29:33','yyyy-mm-dd hh24:mi:ss'), 184
from dual union all select 1014, 'INPRG', to_date('2021-10-03 15:29:41','yyyy-mm-dd hh24:mi:ss'), 185
from dual union all select 1014, 'SLAHOLD', to_date('2021-10-03 15:29:45','yyyy-mm-dd hh24:mi:ss'), 186
from dual union all select 1014, 'INPRG', to_date('2021-10-03 15:43:40','yyyy-mm-dd hh24:mi:ss'), 187
from dual union all select 1014, 'REJECT', to_date('2021-10-03 15:43:44','yyyy-mm-dd hh24:mi:ss'), 188
from dual union all select 1014, 'CLOSE', to_date('2021-10-07 10:00:21','yyyy-mm-dd hh24:mi:ss'), 2723
--
from dual union all select 1015, 'WAPPR', to_date('2021-10-03 15:25:16','yyyy-mm-dd hh24:mi:ss'), 181
from dual union all select 1015, 'APPR', to_date('2021-10-03 15:25:24','yyyy-mm-dd hh24:mi:ss'), 182
from dual union all select 1015, 'INPRG', to_date('2021-10-03 15:26:45','yyyy-mm-dd hh24:mi:ss'), 183
from dual union all select 1015, 'REJECT', to_date('2021-10-03 15:43:44','yyyy-mm-dd hh24:mi:ss'), 188
from dual union all select 1015, 'CLOSE', to_date('2021-10-07 15:25:16','yyyy-mm-dd hh24:mi:ss'), 2723
--
from dual union all select 1016, 'WAPPR', to_date('2021-10-03 15:25:16','yyyy-mm-dd hh24:mi:ss'), 181
from dual union all select 1016, 'APPR', to_date('2021-10-03 15:25:24','yyyy-mm-dd hh24:mi:ss'), 182
from dual union all select 1016, 'INPRG', to_date('2021-10-03 15:26:45','yyyy-mm-dd hh24:mi:ss'), 183
from dual union all select 1016, 'SLAHOLD', to_date('2021-10-03 15:29:45','yyyy-mm-dd hh24:mi:ss'), 186
from dual union all select 1016, 'INPRG', to_date('2021-10-04 15:29:45','yyyy-mm-dd hh24:mi:ss'), 187
from dual union all select 1016, 'REJECT', to_date('2021-10-04 15:43:44','yyyy-mm-dd hh24:mi:ss'), 188
from dual union all select 1016, 'CLOSE', to_date('2021-10-07 15:25:16','yyyy-mm-dd hh24:mi:ss'), 2723
              from dual
)
,tt as (select t.*,lead(changedate) over (partition by wonum order by changedate) le from t)
select wonum, 
          (max(decode(status, 'CLOSE',changedate)) - min(decode(status, 'WAPPR',changedate))) -  --всего
          nvl(sum(decode(status, 'SLAHOLD',le-changedate)),0) --SLAHOLD
          d
from tt
group by wonum
order by 1
SQL> /

     WONUM          D
---------- ----------
      1014 3.76460648
      1015          4
      1016          3


.......
stax
...
Рейтинг: 0 / 0
11.11.2021, 09:01
    #40110941
Bizkit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать разницу времени между несколькими датами
Stax,

Большое спасибо.
...
Рейтинг: 0 / 0
11.11.2021, 09:01
    #40110942
Bizkit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать разницу времени между несколькими датами
andrey_anonymous,

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


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