【问题标题】:Is there a way to calculate the difference of values between different columns and rows in DB2有没有办法计算 DB2 中不同列和行之间的值差异
【发布时间】:2019-08-28 22:52:51
【问题描述】:

我想计算 DB2 中不同列和行的值的差异,如图所示,我想计算突出显示的 END_TS - START_TS。例如,END_TS:2019 年 8 月 19 日下午 6:48:03 - START_TS:2019 年 8 月 19 日下午 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');

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

【问题讨论】:

    标签: sql database db2 calculation


    【解决方案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'
    

    但是,如果它们不是交错的,则此解决方案将无济于事。

    【讨论】:

      猜你喜欢
      • 2018-07-25
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      • 2019-07-23
      • 2017-07-17
      相关资源
      最近更新 更多