繁体   English   中英

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

[英]Is there a way to calculate the difference of values between different columns and rows in DB2

我想计算DB2中不同列和行中值的差异,就像在图片展示中一样,我想计算突出显示的END_TS-START_TS。 例如END_TS:8/19/2019 6:48:03 pm-START_TS:8/19/2019 12:04:06 pm 在此处输入图片说明

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM