【问题标题】:Removing duplicates with original records删除带有原始记录的重复项
【发布时间】:2016-08-11 15:05:38
【问题描述】:

我有一个很好的 SQL 代码,可以从表中选择/删除重复记录:

WITH CTE AS(
 SELECT UserId, A, B,
 RN = ROW_NUMBER()OVER(PARTITION BY A, B ORDER BY UserId)
 FROM Users
) SELECT * FROM CTE WHERE RN > 1

但它选择了所有没有原始记录的重复项。如何选择重复项 + 其原件 (+1)?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    我认为你想使用count(*) 而不是row_number()

    WITH CTE AS (
          SELECT UserId, A, B, COUNT(*) OVER (PARTITION BY A, B) as cnt
          FROM Users
         )
    SELECT *
    FROM CTE
    WHERE CNT > 1;
    

    【讨论】:

      【解决方案2】:

      如果您想查看原始记录和重复记录,您可以自行加入您的 CTE:

      WITH CTE AS (
           SELECT UserID, A, B, rn=ROW_NUMBER() OVER (PARTITION BY A, B, ORDER BY UserID)
           FROM Users)
      SELECT c1.*, c2.*
      FROM CTE c1
      INNER JOIN CTE c2 ON c1.RN = 1 AND c2.RN > 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-24
        • 2015-01-03
        相关资源
        最近更新 更多