我有一个名为“令牌”的表,用于存储登录到管理面板的用户的所有登录令牌。 id users_id token created_time type access_time220 3 $.... 2020-02-20 17:47:19 BACKOFFICE 2020-02-20 17:23:13221 3 $.... 2020-02-20 17:47:19 BACKOFFICE 2020-02-21 13:12:16222 3 $.... 2020-02-20 17:47:19 BACKOFFICE 2020-02-21 14:35:11223 3 $.... 2020-02-20 17:47:19 BACKOFFICE 2020-02-22 15:37:11224 3 $.... 2020-02-20 17:47:19 BACKOFFICE 2020-02-22 12:11:56225 3 $.... 2020-02-20 17:47:19 BACKOFFICE 2020-02-23 13:59:19我存储用户users_id,创建令牌的时间以及访问和使用令牌的任何时间(以及其他一些位)我的问题是,我将如何删除用户的所有回复,除了最近访问的3个?
2 回答

米脂
TA贡献1836条经验 获得超3个赞
您可以使用 和 :row_number()join
delete t
from tokens t join
(select tt.*, row_number() over (partition by user_id order by access_time desc) as seqnum
from tokens tt
) tt
on tt.id = t.id
where tt.seqnum > 3;

拉风的咖菲猫
TA贡献1995条经验 获得超2个赞
使用子查询获取最新的 3 个 ID,然后在删除时将其排除。
DELETE tokens FROM tokens
LEFT JOIN (
SELECT id
FROM tokens
WHERE users_id = 3
ORDER BY access_time DESC
LIMIT 3) AS newest
ON tokens.id = newest.id
WHERE tokens.users_id = 3 AND newest.id IS NULL
- 2 回答
- 0 关注
- 123 浏览
添加回答
举报
0/150
提交
取消