Есть ли способ вычислить разницу значений между разными столбцами и строками в DB2?

Я хочу рассчитать разницу значений в разных столбцах и строках в DB2, как показано на рисунке, я хочу рассчитать выделенные END_TS - START_TS. например END_TS: 19.08.2019 18:48:03 - START_TS: 19.08.2019 12:04:06 введите здесь описание изображения

Я пытался использовать этот запрос, но он не показывает разницы

SELECT 
t1.PROCESS_NM, 
t1.START_TS, 
t2.END_TS, 
TIMESTAMPDIFF(2,CHAR(t2.END_TS - t1.START_TS)) AS DURATION 
--4 is minutes, 2 for seconds, 8 for hours
FROM PROCESS_LOG t1, PROCESS_LOG t2
WHERE t1.PROCESS_NM=t2.PROCESS_NM
  AND t1.PROCESS_STATE ='BEGIN'
  AND t2.PROCESS_STATE = 'END'
  AND t1.WH_CREATE_TS> CURRENT TIMESTAMP -10 DAYS
  AND t1.PROCESS_NM LIKE ('%xxxxxxxxxxx%')
  AND t2.END_TS=
      (SELECT MIN(t3.END_TS) FROM PROCESS_LOG t3
      WHERE t1.START_TS <= t3.END_TS
      AND t3.PROCESS_STATE = 'END');

Я ожидаю использовать END_TS, когда «process_state» = «END» в правом столбце, минус START_TS, когда «process_state» = «BEGIN» в левом


person Rlearn    schedule 28.08.2019    source источник


Ответы (1)


Если они всегда чересстрочные, как в вашем примере, вы можете использовать для этого функцию LEAD(). Например:

select
  process_nm,
  start_ts,
  timestampdiff(2, char(next_end_ts - start_ts)) as duration
from (
  select
    *,
    lead(end_ts) over(order by wh_create_ts) as next_end_ts
  from process_log
) x
where process_state = 'BEGIN'

Однако, если они не чередуются, это решение бесполезно.

person The Impaler    schedule 29.08.2019