oracle 数据库,一张表里有很多人,每个人又有多条记录,怎样才能把我不需要的删掉只保留每人最新那条记录

 我来答
百度网友14cd83a
2011-01-14
知道答主
回答量:10
采纳率:0%
帮助的人:7.3万
展开全部
如果数据量真的很大。需要考虑问题: 数据量 不能简单的子查询删除,会影响数据库的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
百度网友23e9cedbd
2011-01-14 · TA获得超过1573个赞
知道小有建树答主
回答量:537
采纳率:0%
帮助的人:466万
展开全部
最简单的办法:
前提是你的表用了序列,id值是正常自增的,一句搞定!

delete from usertable where id in (select max(id) from usertable group by name)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
windsock_li
2011-01-14 · 超过25用户采纳过TA的回答
知道答主
回答量:63
采纳率:0%
帮助的人:75.2万
展开全部
delete from t t1 where exists (select * from t t2 where t1.人 = t2.人 and t1.时间 < t2.时间)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
13708248
2011-01-14 · TA获得超过121个赞
知道小有建树答主
回答量:303
采纳率:0%
帮助的人:192万
展开全部
最新的记录,要有个列知道吧.比如日期.
如果有.很好办的.
select name,max(日期) from table group by name asc
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ly863252170
2011-01-14
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
delete from 表 a where date not in(select max(date) from 表 where 字段=a.字段);
select出来你想要的 delete not in 就OK了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式