如何通过SQL获取表中的两行之间的差异以及如何将其放置在新列中

JC5*_*C59 5 sql oracle plsql access-vba

select * from TABLE1
where ENTRY_DATE >=trunc(sysdate-365)
 ORDER BY ENTRY_TIME
Run Code Online (Sandbox Code Playgroud)

这给了我以下结果:

NUMBER_ID | ENTRY_DATE | ENTRY_TIME
----------+------------+------------
        1 | 11/21/2014 | 11/21/2014 08:05:00 AM 
        2 | 11/21/2014 | 11/21/2014 08:08:46 AM 
        3 | 11/21/2014 | 11/21/2014 08:09:51 AM 
        4 | 11/21/2014 | 11/21/2014 08:10:05 AM 
        5 | 11/21/2014 | 11/21/2014 08:10:05 AM 
        6 | 11/21/2014 | 11/21/2014 08:10:59 AM 
        7 | 11/21/2014 | 11/21/2014 08:14:34 AM 
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够通过SQL显示“差异”,其中“差异”列是一个条目和最后一个条目之间的时间差。

我需要的

谁能帮忙将此添加到我的此SQL代码中?谢谢

col*_*sar 7

您已指定多个RDBMS。对于oracle,一个简单的查询将是

    SELECT e_id
         , e_d - NVL(LAG ( e_d ) OVER ( ORDER BY e_d ), e_d) diff
      FROM events
         ;
Run Code Online (Sandbox Code Playgroud)

假设events由创建一个基表

    CREATE TABLE events ( e_id NUMBER PRIMARY KEY, e_d DATE );
Run Code Online (Sandbox Code Playgroud)

差异将以“天”为单位显示。

替代查询不使用该LAG函数,并且-仍以oracle语法表示-应该是可移植的:

    SELECT e.e_id
         , NVL ( e.e_d - elagged.e_d, 0 ) diff
      FROM events e
 LEFT JOIN events elagged  ON ( elagged.e_id = e.e_id - 1 )
  ORDER BY e.e_id
         ;
Run Code Online (Sandbox Code Playgroud)

该sqlfiddle包含完整的示例。