有没有一种方法可以计算DB2中不同列和行之间的值差

时间:2019-08-28 22:52:51

标签: sql database db2 calculation

我想计算DB2中不同列和行中值的差,就像图片所示,我想计算突出显示的END_TS-START_TS。例如END_TS:8/19/2019 6:48:03 pm-START_TS:8/19/2019 12:04:06 pm enter image description here

我尝试使用此查询,但没有显示出差异

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');

我希望在右列中的“ process_state” =“ END”时使用END_TS,在左边的“ process_state'=” BEGIN“时减去START_TS

1 个答案:

答案 0 :(得分:0)

如果它们总是 隔行扫描,例如在您的示例中,则可以使用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'

但是,如果它们不是隔行扫描的,此解决方案将无济于事。