博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SqlServer_删除重复行只保留一条记录
阅读量:7034 次
发布时间:2019-06-28

本文共 1018 字,大约阅读时间需要 3 分钟。

 
前提:相同的数据重复往数据库写入,导致存在仅主键Id不同的重复数据,现在需要去除重复数据,仅保留重复数据中Id最大的一条
 
思路:
1、找出存在重复数据的记录,并取重复数据中最大的Id值
2、删除记录中不包含最大Id值的记录
 
注意:该SQL会删除没有重复数据的记录
实现:
DELETE FROM [Log_IIS].[dbo].[IISLog_table]
WHERE id not in 
(select MAX(Idfrom [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(*) > 1PRINT @CountWHILE(@Count>1)BEGIN    DELETE FROM UserBankCardInfo    WHERE id in     (    select MAX(Id) id from UserBankCardInfo group by UserID      having count(*) > 1    )      SET @Count=@Count-1END

 

转载地址:http://lgjal.baihongyu.com/

你可能感兴趣的文章
图例实解:C++中类的继承特性
查看>>
spring的IOC和AOP详细讲解
查看>>
程序员,背着屌丝的罪名.还要被人当作是修电脑的.
查看>>
走向高山
查看>>
xcode7 插件实效解决方法
查看>>
交流心得
查看>>
【翻译】Ext JS最新技巧——2014-9-10
查看>>
linux中如何查询端口被占用的情况
查看>>
【Cocoa(mac) Application 开发系列之三】自定义NSView并绘制一些常见的图形及字符串...
查看>>
jquery 拖动改变div 容器大小
查看>>
21.Linux-写USB键盘驱动(详解)
查看>>
开发人员的福音:微软、谷歌、Mozilla将他们所有的Web API文档放在同一个地方...
查看>>
Mac 安装 JDK
查看>>
spark rdd saveAsTextFile保存为文件
查看>>
修改 sql 提示符信息:
查看>>
SQL Server Service Broker创建单个数据库会话(消息队列)
查看>>
flask-session组件
查看>>
从线程池到synchronized关键字详解
查看>>
SpringBoot单元测试中的事务和Session
查看>>
机器学习领域的一些顶级会议
查看>>