【问题标题】:T-SQL: Delete records based on the value of the 24th record of a Distinct date columnT-SQL:根据不同日期列的第 24 条记录的值删除记录
【发布时间】:2013-04-04 13:42:29
【问题描述】:

我有一个包含许多时间戳条目的表(名为“DATED”的时间戳列)。

我希望定期从表中删除早于 DATED 列中最后 24 个不同日期的旧条目。

所以我正在尝试编写删除查询 who's where 子句解析为 (DATED

我不想将查询设计为删除早于 x 天的记录。 我希望该表始终保持 24 个记录集,即使它们是旧记录。

有什么建议吗?

【问题讨论】:

  • 你能展示一下你的表结构吗?

标签: sql sql-server tsql sql-delete


【解决方案1】:

Coomon Table ExpressionWindow Function 的帮助下,您可以获得您想要的。

对于 SQL Server 2005

WITH recordList
AS
(
    SELECT  *,
            DENSE_RANK() OVER (PARTITION BY convert(varchar(20), DATED, 102)
                                ORDER BY DATED DESC) rn
    FROM    TableName
)
DELETE FROM recordList
WHERE rn > 24

对于 SQL Server 2008+

WITH recordList
AS
(
    SELECT  *,
            DENSE_RANK() OVER (PARTITION BY CAST(DATED AS DATE)
                                ORDER BY DATED DESC) rn
    FROM    TableName
)
DELETE FROM recordList
WHERE rn > 24

【讨论】:

    【解决方案2】:
    DELETE FROM TABLE
    WHERE ID IN
    (
    SELECT ID
    FROM 
    (
      SELECT ID, ROW_NUMBER() OVER (PARTITION BY DATE DESC) RN
      FROM TABLE
     ) A
    WHERE RN > 24
    )
    

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 2013-06-23
      • 2021-12-17
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多