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



  • 相关阅读:
    Linux查看磁盘空间大小
    Qt常见错误
    顺序查找和二分查找代码
    字典树——动态&&静态
    Linux本机和远程服务器之间文件的上传和下载 rz sz
    牛顿迭代法——C语言
    MFC之ListControl选中行删除
    MFC之登录框的问题处理
    MFC之创建多级动态菜单
    c++动态内存知识总结与疑问
  • 原文地址:https://www.cnblogs.com/gossip/p/4611537.html
Copyright © 2011-2022 走看看