Сплит дата звонил с использованием интервалов - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть две таблицы: одна используется для карьеры всех сотрудников, а вторая - для всех перерывов во время работы

это структура карьеры моих сотрудников:

startDate    endDate    year    codeMission  employeNumber  type
 ---------- ---------------------------------------------------
 2001-01-01 2001-12-31   2001     Tx100       N120        work
 2002-01-01 2002-12-31   2002     Tx100       N120        work

тогда вот структура моего прерывания таблицы

startDate     endDate    year   codeMission   employeNumber    type
 ---------- ---------------------------------------------------------
 2001-07-01 2002-04-10   2001     Tx100       N120         interpption

Теперь я хотел бы создать новую таблицу, в которой будет указана карьера всех сотрудников без перерывов. Вот мой пример

Мне бы хотелось, чтобы финальный стол был таким:

startDate  endDate    year codeMission employeNumber     type
 ---------- --------------------------------------------
 2001-01-01 2001-06-31 2001     Tx100       N120         work
 2001-07-01 2002-04-10 2001     Tx100       N120         interpption
 2002-04-11 2002-12-31 2002     Tx100       N120         work

или

startDate  endDate    year codeMission employeNumber     type
 ---------- --------------------------------------------
 2001-01-01 2001-06-31 2001     Tx100       N120         work
 2001-07-01 2001-12-31 2001     Tx100       N120         interpption
 2002-01-01 2002-04-10 2002     Tx100       N120         interpption
 2002-04-11 2002-12-31 2002     Tx100       N120         work

1 Ответ

0 голосов
/ 07 ноября 2018

Процедура, которой я следовал здесь, при вставке данных в новую таблицу обновляет дату начала и окончания, если в ней есть запись в таблице прерываний a

 INSERT INTO NewTable
 SELECT NVL(i2.endDate+1,e.startDate) AS startDate
        ,NVL(i1.startDate-1,e.endDate) AS endDate    
        ,e.year
        ,e.codeMission
        ,e.employeNumber
        ,e.type
 FROM Employee e
 LEFT JOIN Interruption i1 ON e.employeNumber=i1.employeNumber AND YEAR(e.startDate)=YEAR(i1.startDate)
 LEFT JOIN Interruption i2 ON e.employeNumber=i1.employeNumber AND YEAR(e.endDate)=YEAR(i2.endDate)

Теперь мы преобразовали данные в таблицу сотрудников, чтобы они соответствовали таблице прерываний, поэтому теперь мы перемещаем данные в таблицу прерываний

 INSERT INTO NewTable
 SELECT startDate
        ,endDate    
        ,year
        ,codeMission
        ,employeNumber
        ,type
 FROM Interruption
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...