为什么我使用不同的方法确定SQL中的重复记录会得到不同的结果?

时间:2016-02-22 19:20:45

标签: sql sql-server duplicates

我在MS SQL Server 2014中运行以下查询,并且使用CTE技术而不是第一次使用CTE技术获得更多重复项。

(也许是不必要的背景:这是一个大表,包括患者相关数据,在手术后30天内查看住院的入院情况。因此,重复行的标准包括入院标识符和#34; admitPK"和程序标识符" procedurePK")

第一种方法:

SELECT [admitPK]
FROM db.table
GROUP BY [admitPK], [procedurePK]
HAVING COUNT(*) >1

CTE方法:

WITH dupes as (
    SELECT *
    ,ROW_NUMBER() OVER(
         PARTITION BY [admitPK], [procedurePK]
         ORDER BY ([admitPK])) as RN
    FROM db.table)
SELECT *
FROM dupes
WHERE RN > 1

CTE方法返回的重复行数比第一行多1.8%。进一步分析,CTE方法是正确的。 我确信这是我想念的简单事。只是想为我未来的选择学习为什么差异。感谢帮助。

1 个答案:

答案 0 :(得分:0)

这在评论部分得到了解答,现在看来很明显。 Lasse Karlsen最好的解释。如果有2个,3个或更多重复项,GROUP BY查询为每个组生成一行。因此,即使那些具有多个重复项的行仍然只在此查询中生成一行。 WHERE RN> 1个查询列出了所有重复的行(当然除了分区中的第一个列表)。所以对我来说,CTE方法似乎是删除重复行最准确的方法。