У меня есть таблица EMPLOYEE со следующими полями:нужно добавить данные в таблицу, только если последние данные (последняя на основе самого высокой даты) для записи не существует
ENROLL_DATE EMP ID EMP_NAME DEPT SWITCH
01-20-2001 123 ABC D1 N
01-20-2012 123 ABC D2 N
10-12-2016 123 RST D2 N
02-10-2017 123 RST D3 N
02-10-2017 456 TYU D2 N
У меня есть другая таблица EMPLOYE_CUR
ENROLL_DATE EMP ID EMP_NAME DEPT SWITCH
02-23-2017 123 PQR D4 N
02-23-2017 456 TYU D2 Y
мне нужно вставлять записи в таблице СОТРУДНИК только если его новая запись (New будет запись изменена для EMP_ID или EMP_NAME или DEPT, даже если ПЕРЕКЛЮЧАТЕЛЬ изменяется мы не будут вставлять эту запись) мы будем сравнением reocrd для emp_ID для hisgest ENROLL_DATE. Поэтому, если запись будет изменена на основе последней записи для emp_ID в таблице EMPLOYEE, тогда только мы будем вставлять эту запись. Таким образом, в вышеописанном случае записи, которые должны быть вставлены являются:
ENROLL_DATE EMP ID EMP_NAME DEPT SWITCH
02-23-2017 123 PQR D4 N
Так таблица сотрудников теперь будет:
ENROLL_DATE EMP ID EMP_NAME DEPT SWITCH
01-20-2001 123 ABC D1 N
01-20-2012 123 ABC D2 N
10-12-2016 123 RST D2 N
02-10-2017 123 RST D3 N
02-19-2017 123 RST D4 Y
02-23-2017 123 PQR D4 N
Я пытался сделать это с помощью курсора, получая все записи образуют РАБОТНИКОВ таблицу с самым высоким Enroll_date, а затем подумать, чтобы сравнить это с таблицей EMPLOYEE_CUR, но не мог понять, как это сделать.
Может ли кто-нибудь помочь мне с запросом здесь?
Спасибо!
* изменено для EMP_ID *, вероятно, слишком много. Новый EMP_ID является простым новым сотрудником, у вас нет шансов, что ваша таблица распознает chnage из EMP_ID (для этого потребуется дополнительный столбец PREVIOUS_EMP_ID) –
. Посмотрите на таблицу 'EMPLOYEE_CUR', последние две строки. Представьте, что 'EMP_NAME' был' PQR' в обоих (вместо перехода от 'RST' к' PQR'). В таком случае вы все равно вставляете обе строки? Если нет, какой из них вы вставляете - только более ранний? (Это был бы наиболее логически согласованный ответ) – mathguy
И, в любом случае, НЕ делайте этого в PL/SQL-процедуре; независимо от правильного и полного требования, вы можете сделать все это в простом SQL, с гораздо большей эффективностью и ремонтопригодностью. – mathguy