我在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方法是正确的。 我确信这是我想念的简单事。只是想为我未来的选择学习为什么差异。感谢帮助。
答案 0 :(得分:0)
这在评论部分得到了解答,现在看来很明显。 Lasse Karlsen最好的解释。如果有2个,3个或更多重复项,GROUP BY查询为每个组生成一行。因此,即使那些具有多个重复项的行仍然只在此查询中生成一行。 WHERE RN> 1个查询列出了所有重复的行(当然除了分区中的第一个列表)。所以对我来说,CTE方法似乎是删除重复行最准确的方法。