Oracle SQL - 不同的连续日期范围

时间:2017-04-14 21:10:00

标签: sql oracle

给定一个包含表示开始和结束的列的表:

Start        End
01/01/2016   03/01/2016
01/01/2016   06/01/2016

我正在尝试构建一个可以识别不同范围集的查询如下:

[01/01/2016, 03/01/2016)
[03/01/2016, 06/01/2016)

这个概念叫什么,我怎样才能用SQL实现呢?

2 个答案:

答案 0 :(得分:3)

您可以将所有日期放在一起并使用lead()

with d as (
      select start as dte
      from t
      union  -- on purpose to remove duplicates
      select end as dte
      from t
     )
select dte as start, lead(dte) over (order by dte) as end
from d;

如果您想阻止最终的NULL值。 。

select d.*
from (select dte as start, lead(dte) over (order by dte) as end
      from d
     ) d
where end is not null;

答案 1 :(得分:0)

选择滞后(end_date,1,start_date)over(order by end_date)start_date,end_date from jtest14;