从mysql中的表中删除N条旧记录

Awa*_*wan 5 mysql sql sql-delete

我有一个像这样的LoginTime表:

id | user_id | datetime
1  |   1     | 2011-01-19 18:51:01
2  |   1     | 2011-01-19 18:51:02  
3  |   1     | 2011-01-19 18:51:03  
4  |   1     | 2011-01-19 18:51:04  
5  |   1     | 2011-01-19 18:51:05  
6  |   1     | 2011-01-19 18:51:06  
7  |   1     | 2011-01-19 18:51:07  
8  |   1     | 2011-01-19 18:51:08  
9  |   1     | 2011-01-19 18:51:09  
10 |   2     | 2011-01-19 18:51:10  
Run Code Online (Sandbox Code Playgroud)

我想只保留5个最新的(按'datetime'列)记录并删除所有以前的记录 user_id=1

是否有可能通过一个mysql查询来实现这一点?

and*_*rii 8

DELETE 
FROM LoginTime 
WHERE user_id = 1 
ORDER BY datetime ASC 
LIMIT 5
Run Code Online (Sandbox Code Playgroud)


joc*_*ull 5

我相信这会起作用...

DELETE FROM LoginTime WHERE id IN (
     SELECT id
     WHERE user_id = 1
     ORDER BY datetime DESC
     LIMIT 0, 5
)
Run Code Online (Sandbox Code Playgroud)