【问题标题】:Find older records in a group in a SQL query在 SQL 查询中查找组中较旧的记录
【发布时间】:2020-11-12 15:16:23
【问题描述】:

我正在尝试在一组 SQL 表中查找较旧的记录,以便删除它们。但我什至无法选择它们。

表格如下:

我想做的是只保留每个问题的前 3 个最新更改,并且我想删除旧记录。

要找到每个问题的前 3 个最新版本之外的 SQL,需要什么 SQL?谢谢!

【问题讨论】:

    标签: mysql subquery where-clause greatest-n-per-group window-functions


    【解决方案1】:

    要找到每个问题的前 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
    

    【讨论】:

    • 感谢@GMB!我想我有它的工作。问题.. 如果我想保留前 3 部分,最后一部分不是 > 3(不是 >= 3)吗?
    • @ArcticCoder:不,确实是>= 3。子查询计算具有更大change_date 的记录。如果有 3 条记录的日期更大,则表示当前记录排在第 4 位。
    • 啊,我明白了——非常漂亮!这为我节省了几个小时。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多