问题:计算2条数据的处理时间差
背景:一个数据表中有一个处理时间的字段,每处理一笔,程序会插入当前时间,需要统计处理速度,就要用最后一笔的处理时间,减去第一笔的处理时间。
例如数据表A,有字段deal_time 表示处理时间。查询最后一行数据有一个处理时间
查询开始一行数据有一个处理时间,如果计算这两个时间差。多谢

解决方案 »

  1.   

    用统计函数max(deal_time)-min(deal_time) 
      

  2.   

    Select sysdate - (sysdate - 100) from dual --取两个日期之间的天数 Select (sysdate - (sysdate - 100)) * 1440 from dual --取两个日期之间的分钟数
     
    Select (sysdate - (sysdate - 100)) * 1440 * 60 from dual --取两个日期之间的秒数
      

  3.   

    oracle的date类型可以直接进行减法操作,得到的结果单位是天。如果要转换成其它单位,比如小时,直接乘以24进行换算就可以了。
      

  4.   


    with tbl as
    (
        select 'a' as proc, sysdate - 0.8 as deal_time from dual
         union all
        select 'a' as proc, sysdate - 0.5 as deal_time from dual
         union all
        select 'a' as proc, sysdate - 0.2 as deal_time from dual
         union all
        select 'b' as proc, sysdate - 0.5 as deal_time from dual
         union all
        select 'b' as proc, sysdate as deal_time from dual
    )
    select t.proc, t.deal_time_dif
      from (select proc, 
                   nvl(lead(deal_time) over(partition by proc order by deal_time), deal_time) - deal_time as deal_time_dif,
                   iasc
              from (select proc, deal_time, 
                           row_number() over(partition by proc order by deal_time) as iasc,
                           row_number() over(partition by proc order by deal_time desc) as idesc
                      from tbl)
             where iasc = 1 or idesc = 1) t
     where iasc = 1;
      

  5.   


    在各位的建议下已经解决此问题。多谢
    select ROUND(TO_NUMBER(max(t.deal_time)-min(t.deal_time)) * 24 * 60 * 60) from a t 
      

  6.   

    SELECT MAX(deal_time),MIN(deal_time),COUNT(deal_time) FROM TABEL;
    看下是不是这样