【数据库】SQLSERVER利用系统方式高效去除重复数据行

不知道各位同学有没有遇到这样的痛苦:当数据库里的数据量级很大很大的时候,发现里面很多重复的数据,这个时候用常规语句写法去删除的时候,效率非常低。

其实,SQLSERVER里自从SQL2005以后已经提供了很多系统函数,可以方便快速的处理。

可以使用  ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2)

解释一下:表示根据COL1分组,在分组内部根据 COL2排序

                 函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

举个例子,就非常清楚明白了。

  WITH TEST AS
 (
    SELECT ROW_NUMBER() 
    OVER(PARTITION BY col1,col2,col3 order by col4) 
    AS NUM,* FROM  table1

 )

--只保留num=1的记录,重复的删除

 DELETE FROM TEST  WHERE NUM != 1

 经测试,效率非常高。有兴趣的同学可以尝试一下。

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试