查询以仅从开始日期的表中获取开始日期和结束日期

时间:2016-11-18 03:36:12

标签: sql oracle

我有一个包含日期和值的表格,如:

START_DATE    VALUE
------------  -----
01-JAN-2015     A
01-MAR-2015     B
01-AUG-2015     (null)
15-AUG-2015     A
01-SEP-2015     C
01-JAN-2016     B
01-JUN-2016     C

每个start_date表示值更改的日期。 我正在尝试获取包含结束日期作为下一个日期(按时间顺序)减去一天的输出,即:

START_DATE    END_DATE    VALUE
----------    ----------  -----
01-JAN-2015   28-FEB-2015   A
01-MAR-2015   31-JUL-2015   B
01-AUG-2015   14-AUG-2015   (null)
15-AUG-2015   31-AUG-2015   A
01-SEP-2015   31-DEC-2015   C
01-JAN-2016   31-MAY-2016   B
01-JUN-2016   (null)        C

我是否可以使用查询来获取每个间隔的开始和结束日期?...可能使用分层查询?

这里,我在开发过程中使用的摘录可以节省一些时间:

with my_table 
          as(
          select to_date('01-JAN-2015') start_date,'A' value from dual
          union
          select to_date('01-MAR-2015') start_date,'B' value from dual
          union
          select to_date('01-AUG-2015') start_date,'' value from dual
          union
          select to_date('15-AUG-2015') start_date,'A' value from dual
          union
          select to_date('01-SEP-2015') start_date,'C' value from dual
          union
          select to_date('01-JAN-2016') start_date,'B' value from dual
          union
          select to_date('01-JUN-2016') start_date,'C' value from dual
          )
          select ...

2 个答案:

答案 0 :(得分:2)

TableModel

答案 1 :(得分:-2)

试试这个

使用AS(选择ROWNUM作为RN,A。*来自SALESNEW A)

SELECT X.START_DATE,Y.START_DATE-1 AS END_DATE,X.VALUE from A X,A Y 在哪里(当X.RN> = 1然后X.RN + 1结束时的情况)= Y.RN(+);