2011-10-31 66 views
1

我想从“idx_links”表中删除除最新的20个之外的所有旧行。 pubDate是时间戳。删除除前20位的所有旧行

这个选择带来的行:

SELECT @row := @row + 1 AS row, t.* 
FROM idx_links t, (SELECT @row := 0) r 
having(row>20) 
ORDER BY pubDate DESC 

如何删除此行?

回答

3

这个怎么样 - 删除pubDate排名前20的所有行。

DELETE idx_links 
WHERE ID NOT IN (SELECT ID FROM idx_links 
        ORDER BY pubDate DESC LIMIT 0,20); 

交替日期,避免子查询的IN条款:

DELETE idx_links 
WHERE pubDate < (SELECT pubDate FROM idx_links 
       ORDER BY pubDate DESC LIMIT 20,1); 
+0

我想,(因为我给你相同的答案),但我有这个错误:'[ERR ] 1235 - 此版本的MySQL尚不支持“LIMIT&IN/ALL/ANY/SOME子查询”。我有MySql 5.1.39。 – Marco

+0

反正+1你,因为我觉得这可能是最新的MySQL释放一个很好的解决方案...... – Marco

+0

马可,怎么样通过pubdate的从上面找到20 pubdate的,并删除所有谁比,老年人(此时,而不是ID)。 –