[英]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.