SQL表執行insert陳述句后出現大量重復資料,code是唯一的,ID是按照序號排列的,如何寫個組合陳述句洗掉ID較大的哪些資料?
uj5u.com熱心網友回復:
請提供表結構, 測驗資料, 處理邏輯和希望結果.uj5u.com熱心網友回復:
按照code分組,id升序排序,洗掉id不為1的就可以了可以參照如下代碼
--------------------測驗資料------------------
create table dul(id int,code varchar(255))
insert into dul values(1,'code1')
,(2,'code1'),(3,'code1'),(4,'code2'),(5,'code2')
select * from dul
---------------洗掉重復code id較大的---------------
with cte as (
select id,code,ROW_NUMBER() over(partition by code order by id) as n from dul
)
delete from cte where n<>1
原始資料:

洗掉后資料:
uj5u.com熱心網友回復:
---這是要洗掉的大的id結果select a.* from table_name a
where exists( select 1 from (select code, min(id) as min_id from table_name group by code) b where a.code=b.code and a.id>b.min_id
)
go
/*
---檢查結果沒問題執行洗掉操作
select a.* from table_name a
where exists( select 1 from (select code, min(id) as min_id from table_name group by code) b where a.code=b.code and a.id>b.min_id
)
go
*/
uj5u.com熱心網友回復:
---檢查結果沒問題執行洗掉操作delete from table_name a
where exists( select 1 from (select code, min(id) as min_id from table_name group by code) b where a.code=b.code and a.id>b.min_id
)
go
*/
uj5u.com熱心網友回復:
2樓的就可以uj5u.com熱心網友回復:
使用開窗函式,洗掉重復值呢?-請看一看我們組每次洗掉重復資料,都采用此方法。
uj5u.com熱心網友回復:
4樓的就可以uj5u.com熱心網友回復:
select id,code from table group by `code` order by `id` asc;通過上面陳述句篩選出唯一的code,然后通程序式將包含這些code的id組成字串,如 str=(1,2,3,5...);
再執行sql:delete * from table where id not in str;執行完就洗掉了所有的重復code了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/14560.html
標籤:應用實例
