我有一个活动表,其中包含对用户表的外键引用。一个用户可以有很多活动,而我有一份每天都会填充他们的活动的工作。该作业运行后,我想运行一个 SQL 查询,该查询将删除每个用户最旧的记录并保留最新的 10 条记录。这是架构:
用户
id name
1 Jimmy
2 Johnny
用户活动
id user_id activity date
1 1 foo 2020-08-07 00:00:00
2 1 bar 2020-08-08 00:00:00
3 1 baz 2020-08-09 00:00:00
4 2 foo 2020-08-07 00:00:00
5 2 bar 2020-08-08 00:00:00
6 2 baz 2020-08-09 00:00:00
如何编写查询以将每个用户的记录截断到最新的 10 条?
这适用于 mysql 5.x 及更高版本
mysql 自版本以来具有窗口函数 ROW_NUMBER 以便可以在没有用户定义变量的情况下编写子查询
我添加了一些数据以表明它有效
思路很简单,按user_id对所有日期进行排序,保持10个最新,rownumber定义了按日期降序排序的记录的位置
db<>在这里摆弄
对于Sql 服务器
3 行受影响
db<>在这里摆弄