我有一个包含日期范围的表,其中一些是连续的:
COUNTRY START_DATE END_DATE CODE
------- ---------- ---------- ----
FR 01/05/2014 05/06/2014 07
FR 05/06/2014 30/06/2014 07
US 12/05/2010 31/12/2014 08
FR 30/06/2014 12/01/2015 07
如何在数据中找到连续的范围?对于国家&地区的FR'和代码' 07'第二行的开始日期,05/06/2014,与第一行的结束日期相同;并且第三行的开始日期与第二行的结束日期相同,因此这三行是连续的,我希望这三个记录的整个开始和结束日期:
COUNTRY START_DATE END_DATE CODE
------- ---------- ---------- ----
FR 01/05/2014 12/01/2015 07
答案 0 :(得分:0)
您可以使用窗口功能来完成此操作。此代码改编自another answer,应该适合您。目前还不清楚数据是应该按国家/地区划分还是按代码划分(从示例数据中无法分辨),但是如果需要按国家/地区和代码对数据进行分区,请将谓词更改为partition by country, code order by start_date
代替。
select
country,
code,
min(start_date) start_date,
max(end_date) end_date
from (
select
country,
code,
start_date,
end_date,
max(rn) over (partition by country order by start_date) maxrn
from (
select
country,
code,
start_date,
end_date,
case lag(end_date) over (partition by country order by start_date)
when start_date then null
else rownum
end rn
from table1
)
)
group by country, maxrn, code
order by country, start_date