【问题标题】:MSSQL Query to delete duplicate rows from a TABLE leaving distinct rows in tableMSSQL查询从表中删除重复的行,在表中留下不同的行
【发布时间】:2012-12-05 23:21:13
【问题描述】:

我需要从具有相同customer_iddeactivation_date 的表Log删除所有重复行,除了第一次出现的类似行。如何以最少数量的 sql 语句实现这一目标。

我使用的是 MS SQL Server 2008 速成版。

【问题讨论】:

  • 你用的是什么版本的sql-server?
  • @Arion sql 2008 速成版
  • 这个“日志”表是否有自己的 id,对每一行来说都是唯一的?
  • 嘿 Akhil,您只想保留一个独特的记录吗?还是第一条 One 记录?

标签: sql sql-server sql-server-2008


【解决方案1】:

类似:

DELETE FROM Log WHERE LogId NOT IN 
 (SELECT Min(LogId) FROM Log GROUP BY customer_id, deactivation_date)

【讨论】:

    【解决方案2】:

    或者:

    with cte as (
        select row_number() over (partition by customer_id, deactivation_date
        order by log_id) as rn
        from Log)
    delete from cte
        where rn > 1;
    

    【讨论】:

      【解决方案3】:

      你没有给我们太多的工作。但也许是这样的:

      ;WITH CTE
      AS
      (
          SELECT
              ROW_NUMBER() OVER(PARTITION BY [Log].customer_id ORDER BY 
                                    deactivation_date) AS RowNbr,
              [Log].*
          FROM
              [Log]
      )
      DELETE FROM [Log]
      WHERE EXISTS
          (
              SELECT
                  NULL
              FROM
                  CTE
              WHERE
                  CTE.RowNbr>1
                  AND CTE.log_id =[Log].log_id 
          )
      

      【讨论】:

        猜你喜欢
        • 2011-05-29
        • 1970-01-01
        • 1970-01-01
        • 2014-09-01
        • 2013-04-08
        • 1970-01-01
        • 1970-01-01
        • 2020-06-05
        • 2012-10-21
        相关资源
        最近更新 更多