我需要根据两个表和基于自定义条件查找重复项。以下内容决定它是否重复,如果是,则只显示最近的一个:SQL:根据自定义标准查找重复记录
如果员工姓名和所有EmployeePolicy CoverageId(s)完全匹配另一个记录,则认为它是重复的。
--Employee Table
EmployeeId Name Salary
543 John 54000
785 Alex 63000
435 John 75000
123 Alex 88000
333 John 67000
--EmployeePolicy Table
EmployeePolicyId EmployeeId CoverageId
1 543 8888
2 543 7777
3 785 5555
4 435 8888
5 435 7777
6 123 4444
7 333 8888
8 333 7776
例如,在示例中的重复以上如下:
EmployeeId Name Salary
543 John 54000
435 John 75000
这是因为它们是在雇员表具有匹配的名称,以及两者都具有唯一的EmployeePolicy表中的CoverageIds完全相同。
注意: EmployeeId 333也与Name = John不匹配,因为他的CoverageID与其他John的CoverageIds不同。
起初,我一直试图通过对记录进行分组并重复计数(*)> 1来找出重复的旧式方式,但后来很快意识到它不起作用,因为在英语中,我的标准定义了重复的SQL的CoverageIDs是不同的,所以它们不被认为是重复的。
通过相同的协议,我想是这样的:
-- Create a TMP table
INSERT INTO #tmp
SELECT *
FROM Employee e join EmployeePolicy ep on e.EmpoyeeId = ep.EmployeeId
SELECT info.*
FROM
(
SELECT
tmp.*,
ROW_NUMBER() OVER(PARTITION BY tmp.Name, tmp.CoverageId ORDER BY tmp.EmployeeId DESC) AS RowNum
FROM #tmp tmp
) info
WHERE
info.RowNum = 1 AND
同样,因为SQL不认为这是重复这是否不起作用。不知道如何将我的英文重复定义翻译成重复的SQL定义。
任何帮助最受赞赏。
用样本数据填充临时表并显示预期结果 –