【问题标题】:Delete duplicate records and keep one [duplicate]删除重复记录并保留一个[重复]
【发布时间】:2015-09-27 08:51:43
【问题描述】:

使用 T-SQL。

我的问题是我有一个usersid 和locationid 的列表。 一个用户只能拥有一个位置。

通过以下查询,我得到一个包含多个位置 ID 的所有用户的列表:

SELECT * 
FROM Userslocation
WHERE [USER] IN (
    SELECT [USER]  
    FROM Userslocation
    GROUP BY [User] 
    HAVING COUNT(*) > 1
    )

结果我得到

location User
80653    83269
63150    83269
80653    84035
63150    84035
80653    85097
63150    85097

我想保留一个结果并删除其余的

location User
80653    83269
80653    84035
80653    85097

【问题讨论】:

  • 您如何决定保留哪些记录...以及删除哪些记录?
  • 返回给用户的位置是否重要?
  • 最高的数字是新的位置编号。

标签: sql sql-server-2008 tsql duplicates duplicate-removal


【解决方案1】:

返回每个用户一次,用户的最大位置:

select user, max(location)
from tablename
group by user
having count(*) > 1

【讨论】:

    【解决方案2】:

    你需要类似 CTE

    WITH UserslocationCTE AS (
        SELECT *,ROW_NUMBER() OVER(PARTITION BY [User] 
        ORDER BY location)'RowRank'
        FROM Userslocation)
    DELETE FROM UserslocationCTE 
    WHERE RowRank > 1
    

    【讨论】:

    • 感谢这项工作:D
    • 太棒了。那就把它标记为答案
    【解决方案3】:

    为 usersLocation 插入一个增量 ID。然后删除大于第一个ID的记录。例如。

    Query
    ___
    SELECT * 
    FROM Userslocation
    WHERE [USER] IN (
        SELECT [USER]  
        FROM Userslocation
        GROUP BY [User] 
        HAVING COUNT(*) > 1
        )
    

    将显示以下结果

    ID   location User
    1    80653    83269
    2    63150    83269
    3    80653    84035
    4    63150    84035
    5    80653    85097
    6    63150    85097
    

    现在可以了

     SELECT *
    --or delete 
    FROM Userlocation
    WHERE id NOT IN (
            SELECT MIN(id)
            FROM Userlocation
            GROUP BY [USER]
            HAVING COUNT(*) > 1
    
            UNION
    
            SELECT MIN(id)
            FROM Userlocation
            GROUP BY [USER]
            HAVING COUNT(*) = 1
            )
    

    【讨论】:

      猜你喜欢
      • 2012-04-12
      • 2013-12-30
      • 1970-01-01
      • 2019-12-20
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 2020-05-14
      相关资源
      最近更新 更多