mysql:求一个删除旧数据的sql

表T的字段F有重复项,要求每项保留最新的100条记录,不足100全部保留,删除超过100的其他数据... 表T的字段F有重复项,要求每项保留最新的100条记录,不足100全部保留,删除超过100的其他数据 展开
 我来答
6rl
2014-03-25 · TA获得超过704个赞
知道小有建树答主
回答量:580
采纳率:66%
帮助的人:376万
展开全部

有唯一标识字段吗?比如自增id字段?

假设你的表表名是tablename, 有字段guid,F,T。其中guid为唯一标识字段,F为有重复项的字段,T为时间,那么下面的sql可以做。

delete from tablename where guid not in (
select guid from (
select
tablename_tmp.*,
@rownum:=@rownum+1 ,
if(@pF=tablename_tmp.F,@rank:=@rank+1,@rank:=1) as rank,
@pF:=tablename_tmp.F 
from (
select * from tablename order by F,T desc
)
tablename_tmp ,
(select @rownum :=0 , @pF := null ,@rank:=0) a
)
result where rank <=100
)
;
open879881179
2014-03-25
知道答主
回答量:36
采纳率:0%
帮助的人:17.5万
展开全部
select * from table_name order by datetime limit 0,100;
然后可以delete不在这个结果集里的数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cactis0906
2014-03-25 · TA获得超过138个赞
知道小有建树答主
回答量:154
采纳率:100%
帮助的人:91.2万
展开全部
先select distinct F,然后用游标循环删除后100项
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wly354621
2014-03-25 · TA获得超过147个赞
知道小有建树答主
回答量:82
采纳率:100%
帮助的人:62.3万
展开全部
先按时间排序, 找出最新的100条,可以用limit 限制
再按条件删除,采用多重查询方式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhangqingxian
2014-03-25 · TA获得超过268个赞
知道小有建树答主
回答量:362
采纳率:0%
帮助的人:308万
展开全部
你有个时间字段吧,否则怎么知道哪些是旧数据哪些是新数据。
追问
确实,假定时间字段T
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式