У меня есть таблица назначений сотрудников в форме, показанной ниже:
<b>emp_id, dept_id, assignment, start_dt, end_dt</b>
1, 10, project 1, 2001-01-01, 2001-12-31
1, 10, project 2, 2002-01-01, 2002-12-31
1, 20, project 3, 2003-01-01, 2003-12-31
1, 20, project 4, 2004-01-01, 2004-12-31
1, 10, project 5, 2005-01-01, 2005-12-31
Из приведенной выше таблицы мне нужно обобщить историю отдела сотрудников, т. Е. Продолжительность работы сотрудника в определенном отделе до перевода вкакой-то другой отдел.
Ожидаемый результат Результат показан ниже:
<b>emp_id, dept_id, start_dt, end_dt</b>
1, 10, 2001-01-01, 2002-12-31
1, 20, 2003-01-01, 2004-12-31
1, 10, 2005-01-01, 2005-12-31
Я пытался решить вышеуказанную проблему с помощью функций аналитики оракула, но не смог получить желаемый результат
select distinct emp_id, dept_id, start_dt, end_dt
from (
select emp_id, dept_id,
min(start_date)
over (partition by emp_id, dept_id order by emp_id, dept_id
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as start_dt,
max(end_date)
over (partition by emp_id, dept_id order by emp_id, dept_id
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as end_dt
from employee_job_assignment
)
where emp_id = 1;
Приведенный выше запрос приводит к следующему выводу:
<b>emp_id, dept_id, start_dt, end_dt</b>
1, 10, 2001-01-01, 2005-12-31
1, 20, 2003-01-01, 2004-12-31