SQL回炉系列(四) 删除重复数据

有时候因为采集程序的问题,会写入一模一样的两条数据,或者我们在做后期统计的过程中稍有不慎,重复运行了统计脚本,而数据库的字段定义又没有阻止重复数据的写入,那么你在这些重复数据中做查询和计算就很可能得到错误的结果,甚至因为重复数据的暴涨拖累整个数据库的运行。

这时你就需要动手删除重复数据。很简单对吧,几行delete足矣!可是,即使是英明神武的你,也会有一(绝)时(对)糊(手)涂(贱)的时候,一删错成千古恨有没有?有没有?

体会了数次懊丧经历之后,我终于开始正视这个问题,下面的步骤每一步都很简单,但照着它做会给你妥妥的保证。

--1. 判断有无重复数据
select back,getTime from dbo.CF_OriginalData_2014_12 group by back,getTime having count(*) > 1

--2. 建临时表,拷贝表结构
select top 0 * into temp1 from CF_OriginalData_2014_12

select * from temp1

--3. 为临时表手动建索引,选择back+getTime为唯一索引,勾选忽略重复的值

--4. 拷贝数据到临时表,此时重复记录会被忽略
insert into temp1(UA,UB,UC,IA,IB,IC,py,Qw,pf,EP,back,F,getTime,Number) Select UA,UB,UC,IA,IB,IC,py,Qw,pf,EP,back,F,getTime,Number from CF_OriginalData_2014_12

--5. 将原表清空,重设自增列序号
delete from CF_OriginalData_2014_12
DBCC CHECKIDENT ('CF_OriginalData_2014_12', RESEED, 1)
DBCC CHECKIDENT ('CF_OriginalData_2014_12', RESEED)

--6. 将临时表中数据考回原表
insert into CF_OriginalData_2014_12(UA,UB,UC,IA,IB,IC,py,Qw,pf,EP,back,F,getTime,Number)
select UA,UB,UC,IA,IB,IC,py,Qw,pf,EP,back,F,getTime,Number 
from temp1

--7. 删除临时表
--drop table temp

--8. 查看数据确认重复数据已删除
select top 100 * from CF_OriginalData_2014_12 order by getTime asc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值