【问题标题】:How to purge versions of items older than the nth version for each item如何清除每个项目的第 n 个版本之前的项目版本
【发布时间】:2018-01-04 23:05:30
【问题描述】:

我想从下面的示例表中清除行,以便每个报告的三个最新版本(按名称)保留在表中。

ReportID 是唯一标识符。示例中的记录按每个名称的 CreateDate 降序排序。

这可以在 T-SQL 查询中完成,还是我需要设置一个游标并以某种方式遍历表?

CREATE TABLE #Reports (
    [ReportID] int
    , [Name] varchar(50)
    , [CreateDate] datetime);

INSERT INTO #Reports (ReportID, [Name], CreateDate)
VALUES (3255, '2018 FTR RE Budget Acceptance Report', '2017-12-28 22:33:28.587'),
(3243, '2018 FTR RE Budget Acceptance Report', '2017-12-26 01:24:34.183'),
(3203, '2018 FTR RE Budget Acceptance Report', '2017-12-19 13:47:48.580'),
(3156, '2018 FTR RE Budget Acceptance Report', '2017-12-13 16:54:01.317'),
(3147, '2018 FTR RE Budget Acceptance Report', '2017-12-13 13:35:02.627'),
(3141, '2018 FTR RE Budget Acceptance Report', '2017-12-04 13:57:41.427'),
(3248, 'Audit Income Statement', '2017-12-26 22:53:50.067'),
(3246, 'Audit Income Statement', '2017-12-26 17:42:39.227'),
(3244, 'Audit Income Statement', '2017-12-26 17:25:18.477'),
(3099, 'Audit Income Statement', '2017-11-24 15:33:10.333'),
(3091, 'Audit Income Statement', '2017-11-24 14:59:16.283'),
(3252, 'FTR ND Budget Acceptance Report', '2017-12-28 22:33:28.260'),
(3240, 'FTR ND Budget Acceptance Report', '2017-12-26 01:24:33.837'),
(3200, 'FTR ND Budget Acceptance Report', '2017-12-19 13:47:48.267'),
(3153, 'FTR ND Budget Acceptance Report', '2017-12-13 16:54:01.067');

谢谢!

【问题讨论】:

    标签: sql-server tsql sql-delete


    【解决方案1】:

    这将保留最后 3 个版本(已更正以保留最后 3 个版本)

    示例

    ;with cte as (
        Select *,RN=Row_Number() over (Partition By Name ORder by CreateDate desc ) from #Reports
    )
    Delete from cte 
     Where RN>3
    
    Select * from #Reports
    

    更新表格

    ReportID    Name                                    CreateDate
    3255        2018 FTR RE Budget Acceptance Report    2017-12-28 22:33:28.587
    3243        2018 FTR RE Budget Acceptance Report    2017-12-26 01:24:34.183
    3203        2018 FTR RE Budget Acceptance Report    2017-12-19 13:47:48.580
    3248        Audit Income Statement                  2017-12-26 22:53:50.067
    3246        Audit Income Statement                  2017-12-26 17:42:39.227
    3244        Audit Income Statement                  2017-12-26 17:25:18.477
    3252        FTR ND Budget Acceptance Report         2017-12-28 22:33:28.260
    3240        FTR ND Budget Acceptance Report         2017-12-26 01:24:33.837
    3200        FTR ND Budget Acceptance Report         2017-12-19 13:47:48.267
    

    【讨论】:

    • 现在是一个不错的答案!我非常感谢。我之前使用过几次 CTE,但从未使用过 OVER 子句。这很漂亮。谢谢。
    • @serbach 很高兴它有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 2012-08-07
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多