powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как посчитать разницу времени между несколькими датами
10 сообщений из 10, страница 1 из 1
Как посчитать разницу времени между несколькими датами
    #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
Как посчитать разницу времени между несколькими датами
    #40109201
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то так: SUM(CASE WHEN LAG(status) != SLAHOLD THEN changedate-LAG(changedate))
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как посчитать разницу времени между несколькими датами
    #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
Как посчитать разницу времени между несколькими датами
    #40109251
Bizkit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

Не получилось
...
Рейтинг: 0 / 0
Как посчитать разницу времени между несколькими датами
    #40109254
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давай ссылку на https://dbfiddle.uk/?rdbms=oracle_18 с твоей структурой, данными
и неудачной попыткой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как посчитать разницу времени между несколькими датами
    #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
Как посчитать разницу времени между несколькими датами
    #40109285
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
del
...
Рейтинг: 0 / 0
Как посчитать разницу времени между несколькими датами
    #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
Как посчитать разницу времени между несколькими датами
    #40110941
Bizkit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

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

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


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