将您的 2 个案例视为单独的查询,然后将它们合并。 WITH 只是我构建虚拟数据。这不会解决 id2 具有 01 初始和 01 最终以及另一行具有 00 和 01 的情况 --- 但这不在您的要求中。如果您有两个 01 01 行的相同 id2 具有相同的最小日期,它也不会解决这个问题,但同样 - 这不在规范中;我只是想把这些事情说得透彻。
with records as
(select 20 as id1, 328 as id2, to_date('2016-11-08','YYYY-MM-DD') as mydate, '01' as myinitial, '01' as myfinal from dual
union all
select 21 as id1, 328 as id2, to_date('2016-11-11','YYYY-MM-DD') as mydate, '01' as myinitial, '01' as myfinal from dual
union all
select 53 as id1, 766 as id2, to_date('2016-09-26','YYYY-MM-DD') as mydate, '00' as myinitial, '01' as myfinal from dual
union all
select 39 as id1, 766 as id2, to_date('2016-11-25','YYYY-MM-DD') as mydate, '01' as myinitial, '00' as myfinal from dual)
select *
from records
where (myinitial = '01' or myfinal = '01')
and myinitial <> myfinal
union
select *
from records r
where r.myinitial = '01' and r.myfinal = '01'
and r.mydate =
(select min(r2.mydate) from records r2
where r2.myinitial='01' and r2.myfinal='01' and r2.id2 = r.id2)
;