首页 > 数据库 > Oracle > 巧用ROWID去除重复项
工作需求遇到的问题,表a有类似如下数据:
号码 所属地市 终端机型
133****3672 杭州 HS-D90
133****3672 杭州 HS-D907
133****3672 杭州 LG-KV755
其中前2列 号码和所属城市都是一样的,但是终端机型有多个,请问如何删掉前2行,只保留最后一行?前2行是用户以前曾用过的机型,最后面的记录是用户目前使用的机型,所以需要保留最后的记录。其他号码还很多这样的情况,手动一个个删会疯掉的。。
创建测试环境进行实验,过程如下:
create table test (phone number,dishi varchar(10),jixing varchar(20))
insert into test
select 13333334444,'杭州','HS-D90' from dual
union
select 13333334444,'杭州','HS-D907' from dual
union
select 13333334455,'杭州','HS-D908' from dual
union
select 13333334455,'杭州','HS-D909' from dual
union
select 13333334455,'杭州','LG-KV755' from dual
select * from test
delete from test where rowid not in
(select max(rowid) from test group by phone,dishi)
总结:可以通过max(rowid)然后group by的方式找到最后面的记录,然后删除不是max(rowid)的记录即可!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22918188/viewspace-1029033/ ,如需转载,请注明出处,否则将追究法律责任。