【问题标题】:Delete all but the newest with specific filename删除除具有特定文件名的最新文件之外的所有文件
【发布时间】:2021-08-11 19:24:46
【问题描述】:

我迁移了一个文件记录器以记录到数据库而不是磁盘。这会导致数据库中出现许多重复,而在磁盘上该文件将刚刚被覆盖。我想删除给定特定文件名的所有“非最新”行,SQL 会根据下表执行此操作:

表格: log_rules

列: log_rules_id、file_name、file_data、create_date

我正在使用 SQL Server。

伪 SQL:

delete from log_rules where "is not neweset with file_name"

我试图避免“in 子句”的条目数不能超过 2k 的错误。

谢谢!

【问题讨论】:

  • 根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。

标签: sql sql-server tsql


【解决方案1】:

一种方法使用可更新的 CTE:

with todelete as (
      select lr.*,
             row_number() over (partition by file_name order by create_date desc) as seqnum
      from log_rules
     )
delete from todelete
    where seqnum > 1;

【讨论】:

    猜你喜欢
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 2012-12-15
    • 2015-03-03
    相关资源
    最近更新 更多