MySQL:如何删除特定用户ID的所有旧记录,但保留最新的3个?

我有一个名为“令牌”的表,用于存储登录到管理面板的用户的所有登录令牌。


    id  users_id    token   created_time        type        access_time

220 3       $....   2020-02-20 17:47:19 BACKOFFICE  2020-02-20 17:23:13

221 3       $....   2020-02-20 17:47:19 BACKOFFICE  2020-02-21 13:12:16

222 3       $....   2020-02-20 17:47:19 BACKOFFICE  2020-02-21 14:35:11

223 3       $....   2020-02-20 17:47:19 BACKOFFICE  2020-02-22 15:37:11

224 3       $....   2020-02-20 17:47:19 BACKOFFICE  2020-02-22 12:11:56

225 3       $....   2020-02-20 17:47:19 BACKOFFICE  2020-02-23 13:59:19

我存储用户users_id,创建令牌的时间以及访问和使用令牌的任何时间(以及其他一些位)


我的问题是,我将如何删除用户的所有回复,除了最近访问的3个?


函数式编程
浏览 106回答 2
2回答

米脂

您可以使用 和 :row_number()joindelete 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;

拉风的咖菲猫

使用子查询获取最新的 3 个 ID,然后在删除时将其排除。DELETE tokens FROM tokensLEFT JOIN (        SELECT id    FROM tokens    WHERE users_id = 3    ORDER BY access_time DESC    LIMIT 3) AS newestON tokens.id = newest.idWHERE tokens.users_id = 3 AND newest.id IS NULL
打开App,查看更多内容
随时随地看视频慕课网APP