我最近开始学习SQL,现在被要求对一个表执行简单的删除操作,只保留每个用户的最后100个记录。我正在研究最佳方法(更有效的方式)来完成此操作,并找到了一些可能的解决方案(SQL查询:删除表中除最新N条记录外的所有记录?,从SQL数据库表中删除除前n条之外的全部记录),但是很难选择一个基于效率的方案。因此,我在这里寻求您的帮助。
下面是名为“access”的表格,其中记录着用户的访问日志。
access:
- id (autoincrement) - primary
- userid (integer 11) - key
- refer (varchar 100)
- date (date/time)
我的想法是在同一用户进入系统并插入新的日志之前,每次删除用户ID中的旧记录。
我尝试了下面的代码,但是遇到错误:这个版本的MySQL还不支持'LIMIT & IN/ALL/ANY/SOME subquery'
DELETE FROM
access
WHERE
id NOT IN (
SELECT id FROM access WHERE userid = 10 ORDER BY id DESC LIMIT 100
);
请问,您能给我提供一些解决方案吗?谢谢!