zoukankan      html  css  js  c++  java
  • SqlServer_删除重复行只保留一条记录

     
    前提:相同的数据重复往数据库写入,导致存在仅主键Id不同的重复数据,现在需要去除重复数据,仅保留重复数据中Id最大的一条
     
    思路:
    1、找出存在重复数据的记录,并取重复数据中最大的Id值
    2、删除记录中不包含最大Id值的记录
     
    注意:该SQL会删除没有重复数据的记录
    实现:
    DELETE FROM [Log_IIS].[dbo].[IISLog_table]
    WHERE id not in 
    (select MAX(Id) from [IISLog_table] group by [RequestTime]
          ,[LogFilename]
          ,[LogRow]
          ,[date]
          ,[time]
          ,[cIp]
          ,[csUsername]
          ,[sSitename]
          ,[sComputername]
          ,[sIp]
          ,[sPort]
          ,[csMethod]
          ,[csUriStem]
          ,[csUriQuery]
          ,[scStatus]
          ,[scSubstatus]
          ,[scWin32Status]
          ,[scBytes]
          ,[csBytes]
          ,[timeTaken]
          ,[csVersion]
          ,[csHost]
          ,[csUserAgent]
          ,[csCookie]
          ,[csReferer]
          ,[sEvent]
          ,[sProcessType]
          ,[sUserTime]
          ,[sKernelTime]
          ,[sPageFaults]
          ,[sTotalProcs]
          ,[sActiveProcs]
          ,[sStoppedProcs] having count(*) > 1)   



    下面代码通过循环方式删除重复行,不会影响到没有重复行的记录

    DECLARE @Count INT 
    select @Count=COUNT(UserID) from UserBankCardInfo group by UserID
      having count(*) > 1
    PRINT @Count
    
    WHILE(@Count>1)
    BEGIN
        DELETE FROM UserBankCardInfo
        WHERE id in 
        (
        select MAX(Id) id from UserBankCardInfo group by UserID
          having count(*) > 1
        )  
        SET @Count=@Count-1
    END



  • 相关阅读:
    Swing程序最佳架构设计—以业务对象为中心的MVC模式(转)
    股市投资策略总结(转)
    php学习笔记--高级教程--读取文件、创建文件、写入文件
    史上最简单的Hibernate入门简单介绍
    Java中StringBuilder的清空方法比較
    DHCP Option 60 的理解
    ICMP报文分析
    软件測试自学指南---从入门到精通
    Qt多线程学习:创建多线程
    Bulk Insert命令具体
  • 原文地址:https://www.cnblogs.com/gossip/p/4611537.html
Copyright © 2011-2022 走看看