В моей таблице есть несколько записей о сотрудниках, и мы идентифицируем дубликаты в них на основе одного поля с именем workno
.Мои данные в TABLE_A
показаны ниже
NAME WORKNO DATE
---------------------------
John 30000 09-JAN-2012
Franklin 40000 08-DEC-2014
Alicia 25000 19-JUL-2013
Jennifer 43000 20-JUL-2015
Gary 38000 15-SEP-2016
Joyce 25000 31-JAN-2017
Ahmad 25000 29-MAR-2017
James 55000 10-APR-2017
Jill 43000 12-OCT-2017
Jack 55000 18-JAN-2018
Представьте, что здесь находится около миллиона записей.Поэтому нужна помощь с эффективностью
Мой требуемый вывод: -
Сценарий 1 : Хранение записей, которые не имеют дубликатов (на основе workno), в самой table_A.из приведенной выше таблицы в конце должны быть только Джон, Франклин и Гэри, поскольку у них нет дубликатов с workno.
Сценарий 2 : первая запись для конкретного workno (в случае дубликатов)) должно быть записано в table_B.«Алисия» с workno 25000 будет добавлена в Table_B
Сценарий 3 : после записи первого дубликата в table_B оставшиеся записи должны быть вставлены в table_C."Joyce" и "Ahmad" с workno будут добавлены в table_C
Я попытался написать свой запрос, который отлично работает для сценариев 1 и 2. Нужна помощь, если есть лучший способ, если это сделать.Но часть вставки выдает мне ошибку (хотя часть запроса работает нормально).
Отчет об ошибке:
Ошибка SQL: ORA-01847: день месяца должен быть между 1 и последним днеммесяца 01847. 00000 - «день месяца должен быть между 1 и последним днем месяца» * Причина:
* Действие:
Insert into ztempo
Select *
from (SELECT fname, minit, lname, bdate, address, sex, salary, superssn, dno,
ROW_NUMBER() OVER (PARTITION BY salary ORDER BY rownum) num
from Select *
from ztemp
where salary in (Select salary from ztemp group by salary having Count(*) > 1)
)
)
where num = 1;
Я думаю, что я могу использовать тот же код снекоторые настройки в конце «где num> 1» для сценария 3. Но возникают проблемы при вставке.Пожалуйста, помогите
Нужна помощь в его заполнении.Заранее спасибо.