У меня есть следующие столбцы в таблице:
Department_id,
employee_id,
hire_date,
fire_date.
Вот пример данных. Я ищу любой краткий и оптимальный код для соответствия датам приема на работу и датам увольнения различных сотрудников в каждом отделе. В приведенных ниже примерах данных дата найма 4-го сотрудника равна дате увольнения 3-го сотрудника и дате увольнения 5-го сотрудника, поэтому эти сотрудники сопоставляются, и в столбце индикатора указывается, совпадают ли с датой его приема на работу или датой увольнения. Шестой сотрудник не подходит, потому что он не находится в одном отделе с другими сотрудниками, хотя его fire_date также равен «2019-05-25». 1-й и 2-й сотрудники не совпадают, потому что они имеют одинаковую дату hire_date, между датой увольнения и датой найма нет совпадения. 1-й сотрудник также не привязан к самому себе, поскольку сопоставление возможно только между разными сотрудниками.
Редактировать : если один сотрудник сопоставляется как на hire_date, так и в fire_date, тогда может быть указано другое имя используется как 'fire_and_hire' в столбце индикатора.
create table employees
(dep_id char(3),
emp_id int,
hire_date date,
fire_date date);
insert into employees values('A1',1, TO_DATE('2019-05-04','YYYY-MM-DD'), TO_DATE('2019-05-04','YYYY-MM-DD'));
insert into employees values('A1',2, TO_DATE('2019-05-04','YYYY-MM-DD'), null);
insert into employees values('A1',3, TO_DATE('2019-05-20','YYYY-MM-DD'), TO_DATE('2019-05-25','YYYY-MM-DD'));
insert into employees values('A1',4, TO_DATE('2019-05-25','YYYY-MM-DD'), TO_DATE('2019-08-30','YYYY-MM-DD'));
insert into employees values('A1',5, TO_DATE('2019-04-01','YYYY-MM-DD'), TO_DATE('2019-05-25','YYYY-MM-DD'));
insert into employees values('A2',6, TO_DATE('2019-04-05','YYYY-MM-DD'), TO_DATE('2019-05-25','YYYY-MM-DD'));
commit;
--expected output:
DEP_ID EMP_ID HIRE_DATE FIRE_DATE indicator_column
A1 1 04-MAY-19 04-MAY-19 -
A1 2 04-MAY-19 - -
A1 3 20-MAY-19 25-MAY-19 fire
A1 4 25-MAY-19 30-AUG-19 hire
A1 5 01-APR-19 25-MAY-19 fire
A2 6 05-APR-19 25-MAY-19 -