2011-10-31 65 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)。 –