mysql中只保存name字段的最新的100条数据,100条之前的数据删除,该怎么做?

表A中有 字段 id, name, time,但是中间id和time 有断层, 要保留最新的100条数据,该怎么做?
表A中有 字段 id, name, time,但是中间id和time 有断层, 要保留最新的100条数据,该怎么做?

比如name=小明 考试成绩有130条,我只要最近100条, name好多不同:小东,小军,,,,,等等几千人

第1个回答  2015-05-17
delete A
from A left join
(select id,name,time from A order by time desc limit 100) t1
on A.id=t1.id
where t1.id is null追问

确定能对 多个人能起作用吗, 数据大概68万条,name接近5000个

追答

你是对所有的人,一共只保留100条数据(答案如前次)

还是对不同name的人,每人都只留100条数据? 5000人即需要保留约50万数据?

追问

对不同name的人,每人都只留100条数据

追答

delete A
from A left join
(
select
(select top 1 id from A where aa.name=name and aa.time=time) id,
aa.name,aa.time from MZ_GHXX aa left join MZ_GHXX bb
on aa.name=bb.name and aa.time<=bb.time
group by aa.id,aa.name,aa.time
having count(bb.time)<=100
order by aa.name,aa.time desc
) t1
on A.id=t1.id
where t1.id is null

追问

不对

追答

delete A
from A left join
(
select
(select top 1 id from A where aa.name=name and aa.time=time) id,
aa.name,aa.time from A aa left join A bb
on aa.name=bb.name and aa.time<=bb.time
group by aa.id,aa.name,aa.time
having count(bb.time)<=100
order by aa.name,aa.time desc
) t1
on A.id=t1.id
where t1.id is null

追问

数据表A有50M 大小,约40万条数据, 你确定这样做合适不?

追答

最后定时做

本回答被提问者和网友采纳