我想计算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
答案 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'
但是,如果它们不是隔行扫描的,此解决方案将无济于事。