【问题标题】:Remove 1 instance of duplicate values T-SQL [duplicate]删除重复值 T-SQL 的 1 个实例 [重复]
【发布时间】:2013-07-02 08:48:51
【问题描述】:

我目前有一个名为 People 的表。此表中有数千行数据,布局如下:

gkey |    Name |  Date       | Person_Id
1    |    Fred |  12/05/2012 | ABC123456
2    |    John |  12/05/2012 | DEF123456
3    |    Dave |  12/05/2012 | GHI123456
4    |    Fred |  12/05/2012 | JKL123456
5    |    Leno |  12/05/2012 | ABC123456

如果我执行以下操作:

SELECT [PERSON_ID], COUNT(*) TotalCount
FROM [Database].[dbo].[People]
GROUP BY [PERSON_ID]
HAVING COUNT(*) > 1
ORDER BY COUNT(*) DESC

我得到一个回报:

Person_Id     | TotalCount
ABC123456     | 2

现在我只想删除一行重复值,所以当我执行上述查询时,我不会返回任何结果。这可能吗?

【问题讨论】:

  • 我看不到重复值,您要删除 Fred 或 Leno(具有相同 Person_ID)吗?是否有做出此类决定的规则?

标签: sql tsql sql-server-2008-r2


【解决方案1】:
WITH a as
(
SELECT row_number() over (partition by [PERSON_ID] order by name) rn
FROM [Database].[dbo].[People]
)
DELETE FROM a
WHERE rn = 2

【讨论】:

  • 谢谢。欣赏它
【解决方案2】:

试试这个

DELETE FROM [People]
WHERE gkey IN
(
   SELECT MIN(gkey)
   FROM [People]
    GROUP BY [PERSON_ID]
   HAVING COUNT(*) > 1
)

您可以使用MINMax

【讨论】:

    【解决方案3】:
    DELETE FROM PEOPLE WHERE gkey=
    (SELECT MAX(TABLE1.gkey) FROM (SELECT P.gkey, A.PERSON_ID,A.TotalCount FROM People P,(SELECT [PERSON_ID], COUNT(*) TotalCount
    FROM [Database].[dbo].[People]
    GROUP BY [PERSON_ID]
    HAVING COUNT(*) > 1
    ORDER BY COUNT(*) DESC) A WHERE P.gkey=A.gkey) TABLE1 ) TABLE2
    

    【讨论】:

      【解决方案4】:

      在删除中使用 Top 关键字;

      DELETE TOP(1) FROM [People]
      WHERE Person_Id IN
      (
         SELECT MIN([PERSON_ID])
         FROM [People]
         GROUP BY [PERSON_ID]
         HAVING COUNT(*) > 1
      

      )

      该查询与 Vassy 发布的查询相同,只是添加了 Top(1)...

      【讨论】:

        猜你喜欢
        • 2011-08-26
        • 2021-09-13
        • 2013-12-03
        • 1970-01-01
        • 1970-01-01
        • 2014-07-15
        • 1970-01-01
        • 2017-08-14
        • 1970-01-01
        相关资源
        最近更新 更多