SQL-基于上一行的创建和关闭日期

时间:2018-10-11 08:57:59

标签: sql

希望有人能帮助我。我有一个看起来像下面的数据表

  <div data-price="10" data-currency="USD"></div>

以数据的结构方式,创建日期始终设置为创建第一个JobID的日期。我想更改此设置,以便将创建日期设置为上一个JobID的ClosedDate。我理想的输出看起来像下面的

ID   | JobID    | CreatedDate | ClosedDate
3312 |  332     | 01/02/2018  | 03/02/2018
3312 |  223     | 01/02/2018  | 05/02/2018
3312 |  312     | 01/02/2018  | 01/03/2018
3312 |  445     | 01/02/2018  | 04/07/2018

有人知道实现这一目标的最佳方法吗?谢谢 杰西

1 个答案:

答案 0 :(得分:3)

您想要lag()

select ID, JobID, 
       lag(ClosedDate, 1, CreatedDate) over (partition by id order by ClosedDate) as CreatedDate, 
       ClosedDate
from table t;

您没有声明任何DBMS,所以LAG()可能会失败,但是您可以改用子查询:

select t.ID, t.JobID,
       coalesce((select t1.ClosedDate
                 from table t1
                 where t1.id = t.id and t1.ClosedDate < t.ClosedDate 
                 order by t1.ClosedDate desc
                 fetch first 1 rows only
                ), CreatedDate
               ) as CreatedDate, ClosedDate
from table t;

假设CreatedDateClosedDate的格式合理。在第二个版本中,您可能需要limit子句或top (1)括弧而不是fetch first ...