我列出了包含列
的表中员工的过往经验记录Registration_No,Join_Date,Resgn_Date
我需要列出日期重叠的Registration_No
。
黄色方块表示有一圈重叠。
我可以使用任何oracle函数吗?
以下示例数据:
CREATE table A (REGISTRATION_NO number,JOIN_DATE date,RESG_DATE date);
INSERT INTO A values(100,'1-JAN-93','30-DEC-93');
INSERT INTO A values(100,'1-MAY-93','20-MAY-93');
INSERT INTO A values(101,'1-DEC-93','1-NOV-95');
INSERT INTO A values(102,'1-JAN-96','30-MAY-96');
INSERT INTO A values(102,'5-MAY-96','20-DEC-96');
答案 0 :(得分:1)
您可以使用exists:
select t.*
from t
where exists (select 1
from t t2
where t2.Registration_No = t.Registration_No and
t2.Resgn_Date > t.join_date and
t2.join_date < t.resgn_date
);
答案 1 :(得分:1)
select t.reg_number,t.JOIN_DATE,resign_date
from registration t
where exists (select 1
from registration t2
where t2.reg_number = t.reg_number and
t2.resign_date > t.join_date and
t2.join_date < t.resign_date
and t2.rowid<>t.rowid
)
order by reg_number,JOIN_DATE;
答案 2 :(得分:0)
您可以在同一个表上使用自联接或内部联接。
select
t1.Registration_No
from
t t1 inner join t t2 on
(t1.Registration_No = t2.Registration_No) and
((t1.Resgn_Date - 1) =t2.join_date);
答案 3 :(得分:0)
使用原始数据:
select a1.registration_no, a1.join_date, a1.resg_date as resg_date1
, a2.resg_date as resg_date2
from a a1
join a a2
on a2.registration_no = a1.registration_no
and a2.resg_date > a1.join_date
and a2.resg_date < a1.resg_date;
REGISTRATION_NO JOIN_DATE RESG_DATE1 RESG_DATE2
--------------- ----------- ----------- -----------
7673 25/08/2001 31/12/2001 26/08/2001
24939 28/01/1998 05/03/2003 29/01/1998
您可以对此进行更多优化,以包含介于现有加入和辞职日期之间的加入日期。