删除除每个字段的最后10个以外的所有记录

时间:2016-04-23 07:11:59

标签: mysql

我一直试图找到一种方法来做到这一点,但我似乎无法弄清楚如何做到这一点。 下表是我试图“清理”的。

-------------
| Messages  |
-------------
| ID        |
| user_id   |
| msg       |
| timestamp |
-------------

基本上我想删除所有消息,除了最新的10 user_id。 我真的不知道该怎么做。

任何建议都会有用。

3 个答案:

答案 0 :(得分:2)

有关如何编写查找每个stream的最新10行的查询,请参阅Using LIMIT within GROUP BY to get N results per group?。然后,您可以编写一个与其连接的查询作为子查询,并删除其中没有的行。

user_id

DELETE t1.* FROM YourTable AS t1 LEFT JOIN (SELECT ...) AS t2 ON t1.id = t2.id WHERE t2.id IS NULL 替换为您在其他问题中找到的查询。

答案 1 :(得分:-1)

您需要为每个用户重复此操作。

DELETE FROM Messages where user_id='xyz' and ID NOT IN 
  (SELECT * FROM 
   (SELECT ID FROM Messages where user_id='xyz'  ORDER BY timestamp DESC LIMIT 10)
  AS TOP10)

答案 2 :(得分:-2)

尝试这样的事情 -

delete from messages where ID = (SELECT ID FROM messages
ORDER BY timestamp DESC
LIMIT 10)

我不确定这是否有效,但可能会让您了解如何做到这一点。 我希望这会有所帮助。