SELECT NAME, QSNY, ZZNY
FROM (SELECT NAME,
QSNY,
ZZNY,
LAG(ZZNY) OVER(PARTITION BY NAME ORDER BY NAME, QSNY) AS LAG_,
LEAD(ZZNY) OVER(PARTITION BY NAME ORDER BY NAME, QSNY) AS LEAD_
FROM TAB)
WHERE QSNY <= LAG_
OR ZZNY >= LEAD_
ORDER BY NAME DESC, QSNY;
with table1(name, qsny, zzny) as
(
select '张三','199605','199612' from dual union all
select '张三','199701','199705' from dual union all
select '张三','199702','199704' from dual union all
select '张三','199801','199805' from dual union all
select '张三','199806','199812' from dual union all
select '张四','199605','199612' from dual union all
select '张四','199701','199705' from dual union all
select '张四','199706','199712' from dual union all
select '张四','199801','199805' from dual union all
select '张四','199806','199812' from dual union all
select '张五','199605','199612' from dual union all
select '张五','199701','199705' from dual union all
select '张五','199706','199712' from dual union all
select '张五','199801','199802' from dual union all
select '张六','199605','199612' from dual union all
select '张六','199701','199712' from dual union all
select '张六','199801','199812' from dual union all
select '张六','199901','199912' from dual union all
select '张六','200001','200012' from dual union all
select '张六','200101','200112' from dual union all
select '张六','200201','200201' from dual union all
select '张六','200202','200212' from dual union all
select '张六','200301','200312' from dual union all
select '张六','200401','200412' from dual union all
select '张六','200501','200512' from dual union all
select '张六','200601','200612' from dual union all
select '张六','200701','200712' from dual union all
select '张六','200801','200806' from dual union all
select '张六','200807','200812' from dual union all
select '张七','199409','199506' from dual union all
select '张七','199507','199512' from dual union all
select '张七','199512','199512' from dual union all
select '张七','199601','199612' from dual union all
select '张七','199701','199705' from dual union all
select '张七','199706','199712' from dual union all
select '张七','199801','199805' from dual union all
select '张七','199806','199812' from dual union all
select '张七','199901','199906' from dual union all
select '张七','199907','199912' from dual union all
select '张七','200001','200012' from dual union all
select '张七','200101','200112' from dual union all
select '张七','200201','200212' from dual union all
select '张七','200301','200312' from dual union all
select '张七','200401','200412' from dual union all
select '张七','200501','200512' from dual union all
select '张七','200601','200612' from dual union all
select '张七','200701','200712' from dual union all
select '张七','200801','200806' from dual union all
select '张七','200807','200812' from dual union all
select '张八','199409','199506' from dual union all
select '张八','199507','199512' from dual union all
select '张八','199512','199512' from dual union all
select '张八','199601','199612' from dual union all
select '张八','199701','199705' from dual union all
select '张八','199706','199712' from dual union all
select '张八','199801','199805' from dual union all
select '张八','199806','199812' from dual union all
select '张八','199901','199906' from dual union all
select '张八','199907','199912' from dual union all
select '张八','200001','200012' from dual union all
select '张八','200101','200112' from dual union all
select '张八','200201','200212' from dual union all
select '张八','200301','200312' from dual union all
select '张八','200401','200412' from dual union all
select '张八','200501','200512' from dual union all
select '张八','200601','200612' from dual union all
select '张八','200701','200712' from dual union all
select '张八','200801','200806' from dual union all
select '张八','200807','200812' from dual union all
select '张八','200807','200812' from dual
)
, table2 as
(select rownum rn, name, qsny, zzny from table1)
select *
from table2 a
where exists
(
select 1
from table2 b
where a.name=b.name and a.rn<>b.rn
and
(
(a.qsny>=b.qsny and a.qsny<=b.zzny)
or (a.zzny>=b.qsny and a.zzny<=b.zzny)
or (a.qsny<=b.qsny and a.zzny>=b.zzny)
)
)
select A.name,A.qsny,A.zzny,B.name name1,B.qsny qsny1,B.zzny zzny1 from Table1 A,Table1 B
where B.name=A.name and ((B.qsny between A.qsny and A.zzny) or (B.zzny between A.qsny and A.zzny)));