【发布时间】:2019-05-20 13:37:45
【问题描述】:
我正在处理表格中的一组数据。 为简单起见,我有如下表格和一些示例数据:
此表中的一些数据来自不同的来源,这些数据是具有cqmRecordID != null的数据
我需要在此表中查找重复值并删除从其他来源(具有 cqmRecordID 的那些)传来的重复值 如果这些列的值相同,则记录被认为是重复的:
- [姓名]
- 演员([CreatedDate] as Date)
- [创建者]
所以在我上面的示例数据中,记录#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
有没有更好的方法来解决这个问题?一个比另一个性能更好吗?
【问题讨论】:
-
那么这些查询有什么问题?
-
@JuanCarlosOropeza 的查询没有问题.. 但只是想知道这是否是最好的方法.. 这只是样本数据.. 我会有一个大数据集。
-
性能问题应该包括
EXPLAIN和一些关于表大小、索引、当前时间性能、期望时间等的信息。Slow是一个相对术语,我们需要一个真实的值来比较。 -
没有
{1,3}也重复? -
@JuanCarlosOropeza no .. 这些不会重复.. 因为我只认为一条记录来自不同的数据源(cqmRecordNumber 不为空)
标签: sql sql-server