Я работаю с набором данных в таблице.
Для простоты у меня есть таблица, как показано ниже, с некоторыми примерами данных:
Некоторые данные в этой таблице взяты из другого источника, такие данные имеют cqmRecordID != null
Мне нужно найти дубликаты значений в этой таблице и удалить дубликаты, полученные из другого источника (с cqmRecordID)
Запись считается дубликатом, если они имеют одинаковые значения для этих столбцов:
- [Имя]
- Cast ([CreatedDate] as Date)
- [CreatedBy]
Таким образом, в приведенных выше примерах данных запись № 5 и запись № 6 будут считаться дубликатами.
В качестве решения я предложил следующие два запроса:
Запрос № 1:
select * from (
select recordid, cqmrecordid, ROW_NUMBER() over (partition by name, cast(createddate as date), createdby
order by cqmrecordid, recordid) as rownum
from vmsNCR ) A
where cqmrecordid is not null
order by recordid
Запрос № 2:
select A.recordID, A.cqmRecordID, B.RecordID, B.cqmRecordID
from vmsNCR A
join vmsNCR B
on A.Name = B.Name
and cast(A.CreatedDate as date) = cast(B.CreatedDate as date)
and A.CreatedBy = B.CreatedBy
and A.RecordID != B.RecordID
and A.cqmRecordID is not null
order by A.RecordID
Есть ли лучший подход к этому? Является ли один лучше, чем другой по производительности?