2013-04-04 35 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 
)