oracle 数据库,一张表里有很多人,每个人又有多条记录,怎样才能把我不需要的删掉只保留每人最新那条记录
8个回答
展开全部
如果数据量真的很大。需要考虑问题: 数据量 不能简单的子查询删除,会影响数据库的io以及cpu,造成数据库无法使用。
并且,采用分步做的方式,不到最后 不要影响主表。
一个简单的delete 加子查询的,千万级时, 往往几十分钟也删不完,此过程中,数据库几乎不可用,cpu占满
在此基础上,建议下面方法
如果就几千的数据 子查询删就行
0 必做的备份 create table user_table_20110114 as select * from user_table
1 create table user_20110114 as select max(create_time )create_time ,user_code from user_table;
2 insert into new_user_table表(格式一样的) t select * from user_table t1, user_20110114 t2 where t1. create_time =t2.create_time and t1.user_code =t2.user_code
3 truncate(如果表太大,至少至少百万数据量以上) table user_table,表数据不多就delete user_table
4 insert into user_table select * from new_user_table
并且,采用分步做的方式,不到最后 不要影响主表。
一个简单的delete 加子查询的,千万级时, 往往几十分钟也删不完,此过程中,数据库几乎不可用,cpu占满
在此基础上,建议下面方法
如果就几千的数据 子查询删就行
0 必做的备份 create table user_table_20110114 as select * from user_table
1 create table user_20110114 as select max(create_time )create_time ,user_code from user_table;
2 insert into new_user_table表(格式一样的) t select * from user_table t1, user_20110114 t2 where t1. create_time =t2.create_time and t1.user_code =t2.user_code
3 truncate(如果表太大,至少至少百万数据量以上) table user_table,表数据不多就delete user_table
4 insert into user_table select * from new_user_table
展开全部
最简单的办法:
前提是你的表用了序列,id值是正常自增的,一句搞定!
delete from usertable where id in (select max(id) from usertable group by name)
前提是你的表用了序列,id值是正常自增的,一句搞定!
delete from usertable where id in (select max(id) from usertable group by name)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
delete from t t1 where exists (select * from t t2 where t1.人 = t2.人 and t1.时间 < t2.时间)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最新的记录,要有个列知道吧.比如日期.
如果有.很好办的.
select name,max(日期) from table group by name asc
如果有.很好办的.
select name,max(日期) from table group by name asc
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
delete from 表 a where date not in(select max(date) from 表 where 字段=a.字段);
select出来你想要的 delete not in 就OK了
select出来你想要的 delete not in 就OK了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询