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

来源:互联网 发布:java web php 编辑:程序博客网 时间:2024/05/29 00:34

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

这时你就需要动手删除重复数据。很简单对吧,几行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_12select * 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_12DBCC 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
  • SQL回炉系列(一) 序言
  • SQL回炉系列(二) 多表联合查询和排序
  • SQL回炉系列(三) 拆分原始数据到对应的月份表中
  • SQL回炉系列(四) 删除重复数据
  • SQL回炉系列(五) 为显示曲线图获取不同时间颗粒的数据
0 0
原创粉丝点击