zoukankan      html  css  js  c++  java
  • ROW_NUMBER

    16:23 2015/4/16 删除重复数据,连续被两位同事问到完全相同的重复记录如何删除只保留一条

    create table del_samerecords
    (id int,remark varchar(10))
    go
    insert into del_samerecords
    select 1,'a'
    go 2
    go
    insert into del_samerecords
    select 2,'b'
    go 3
    go
    --方式1
    ;with a as
    (
    select ROW_NUMBER() over(partition by id order by id) as rankid,* from del_samerecords
    )
    delete from a where rankid>1
    --方式2
    while(1=1)
    begin
        delete top (1) del_samerecords
        from del_samerecords,
        (select id from del_samerecords group by id having count(*)>1) b
        where del_samerecords.id=b.id
        if @@ROWCOUNT=0
        return
    end
    View Code

    当然最容易理解的是将唯一记录insert到临时表,然后delete原表对应数据,再将临时表中的数据insert到原表
    15:03 2016/1/27 随机修改表中记录

    --比如表里有1W条数据,随机修改表里100条
    DROP TABLE test
    CREATE TABLE test(id INT IDENTITY,idd int)
    DECLARE @i INT=1
    WHILE(@i<1000)
    BEGIN
        INSERT INTO test(idd) select @i
        SET @i=@i+1
    END
    
    ;WITH cte AS 
    (SELECT *,ROW_NUMBER() OVER (ORDER BY NEWID()) rankid FROM test
    )
    UPDATE cte SET idd=999999
    WHERE rankid<=10
    
    SELECT * FROM test
    WHERE idd=999999
    View Code

    两个例子都有借助ROW_NUMBER得到排序rankid,然后以rankid为条件进行操作。

  • 相关阅读:
    Http中的patch
    如何实现腾讯地图的路径规划功能?
    各类数据库分页SQL语法
    ABC222F
    ABC222 G
    LG5308 [COCI2019] Quiz(wqs二分+斜率优化DP)
    [USACO21OPEN] Portals G(Kruskal)
    【做题笔记】SP27379 BLUNIQ
    【做题笔记】CF938C Constructing Tests
    CSP-J/S2021 自闭记
  • 原文地址:https://www.cnblogs.com/Uest/p/5163323.html
Copyright © 2011-2022 走看看