各位大侠 我有这样的一张表
物料号   开始包装时间           重量
.......
10001    2011-02-12 14:12:00     100
10002    2011-02-12 14:12:45     100
10002    2011-02-12 14:13:02     100
.........现在写一个视图物料号   包装所用时间 (秒)           重量
.....
10001    15                             100
10002    17                             100
10002    15                             100
......其中 包装所用时间是下一个物料号的开始包装时间-这个物料号的开始包装时间
请问视图中    包装所用时间 (秒)这一列怎么解决,谢谢

解决方案 »

  1.   


    with a as
    (
    select 10001 col1, '2011-02-12 14:12:00' col2, 100 col3 from dual union all
    select 10002, '2011-02-12 14:12:45', 100 from dual union all
    select 10002, '2011-02-12 14:13:02', 100 from dual 
    )
    select a.* 
           ,(to_date(lag(col2) over(order by col2 desc),'yyyy-mm-dd hh24:mi:ss') 
            -to_date(col2,'yyyy-mm-dd hh24:mi:ss'))*24*60*60  as dif
    from a
    ;      COL1 COL2                      COL3        DIF
    ---------- ------------------- ---------- ----------
         10002 2011-02-12 14:13:02        100
         10002 2011-02-12 14:12:45        100         17
         10001 2011-02-12 14:12:00        100         45
      

  2.   


    WITH t AS (SELECT 
    '10001' NO, to_date('2011-02-12 14:12:00', 'yyyy-mm-dd hh24:mi:ss') TIME, '100' qty FROM DUAL
    UNION
    SELECT 
    '10002', to_date('2011-02-12 14:12:45', 'yyyy-mm-dd hh24:mi:ss'), '100' FROM DUAL
    UNION 
    SELECT 
    '10002', to_date('2011-02-12 14:13:02', 'yyyy-mm-dd hh24:mi:ss'), '100' FROM DUAL
    )
    SELECT NO, ROUND(TO_NUMBER(LEAD(TIME) OVER( ORDER BY rn) - TIME) * 24 * 60 * 60) , qty
    FROM (SELECT NO, TIME, qty, row_number() OVER(ORDER BY NO, TIME) rn
    FROM t)
    ----------------------------------------
    1 10001 45 100
    2 10002 17 100
    3 10002 100