【发布时间】:2020-11-12 15:16:23
【问题描述】:
我正在尝试在一组 SQL 表中查找较旧的记录,以便删除它们。但我什至无法选择它们。
表格如下:
我想做的是只保留每个问题的前 3 个最新更改,并且我想删除旧记录。
要找到每个问题的前 3 个最新版本之外的 SQL,需要什么 SQL?谢谢!
【问题讨论】:
标签: mysql subquery where-clause greatest-n-per-group window-functions
我正在尝试在一组 SQL 表中查找较旧的记录,以便删除它们。但我什至无法选择它们。
表格如下:
我想做的是只保留每个问题的前 3 个最新更改,并且我想删除旧记录。
要找到每个问题的前 3 个最新版本之外的 SQL,需要什么 SQL?谢谢!
【问题讨论】:
标签: mysql subquery where-clause greatest-n-per-group window-functions
要找到每个问题的前 3 个最新版本之外的 SQL,需要什么 SQL?
如果您运行的是 MySQL 8.0,请使用row_number():
select *
from (
select
t.*,
row_number() over(partition by issue_id order by change_date desc) rn
from mytable t
) t
where rn > 3
在早期版本中,您可以使用相关子查询来模拟:
select *
from mytable t
where (
select count(*)
from mytable t1
where t1.issue_id = t.issue_id and t1.change_date > t.change_date
) >= 3
【讨论】:
>= 3。子查询计算具有更大change_date 的记录。如果有 3 条记录的日期更大,则表示当前记录排在第 4 位。