【发布时间】:2017-07-18 15:45:06
【问题描述】:
我尝试按重叠时段对数据进行分组,如果它们完全覆盖更大的时段,则只保留较小的时段。
所以一个例子会更清楚。 让我们假设这个结构和数据
drop table chload.testdata
create table chload.testdata
(
id int,
startdate date,
enddate date,
val text
);
insert into chload.testdata (id,startdate,enddate,val) values
-- included periods
(1, to_date('2009-01-01','YYYY-MM-DD'), to_date('2010-01-01','YYYY-MM-DD'), 'incA'),
(2, to_date('2010-01-01','YYYY-MM-DD'), to_date('2011-01-01','YYYY-MM-DD'), 'incB'),
(3, to_date('2011-01-01','YYYY-MM-DD'), to_date('2012-01-01','YYYY-MM-DD'), 'incC'),
-- isolated period
(4, to_date('2008-01-01','YYYY-MM-DD'), to_date('2009-01-01','YYYY-MM-DD'), 'isoD'),
-- Covering periods
(5, to_date('2009-01-01','YYYY-MM-DD'), to_date('2011-01-01','YYYY-MM-DD'), 'covE'),
(6, to_date('2009-01-01','YYYY-MM-DD'), to_date('2012-01-01','YYYY-MM-DD'), 'covF')
;
现在的游戏就是要得到那个结果
2009-01-01 2010-01-01 incA covE covF
2010-01-01 2011-01-01 incB covE covF
2011-01-01 2012-01-01 incC covF
2008-01-01 2009-01-01 isoD
注意:如果涵盖期间完全被包含期间“涵盖”,则不会显示涵盖期间。
提前致谢:)
【问题讨论】:
-
你自己尝试过什么?
标签: sql postgresql group-by postgresql-9.3 overlap