2013-04-04 73 views
0

24日记录我有一个表有许多时间戳条目(timestamp列命名为“零零”)的值的记录。T-SQL:删除基于一个独特的日期列

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

所以我试图写一个删除查询 谁的WHERE子句解析(日期< [第24届鲜明日期二零零从])

我不想设计查询删除记录比旧x天。 我想该表始终保持,即使他们是旧的记录24个的记录集。

任何意见?

+0

你能告诉你的表结构? – JohnFx 2013-04-04 13:48:39

回答

3

随着Coomon Table Expression的帮助和Window 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 
0
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 
)