我一直试图找到一种方法来做到这一点,但我似乎无法弄清楚如何做到这一点。 下表是我试图“清理”的。
-------------
| Messages |
-------------
| ID |
| user_id |
| msg |
| timestamp |
-------------
基本上我想删除所有消息,除了最新的10 user_id
。
我真的不知道该怎么做。
任何建议都会有用。
答案 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)
我不确定这是否有效,但可能会让您了解如何做到这一点。 我希望这会有所帮助。