2014-03-18 144 views
0

我使用SQL 2012,我有這個表:刪除條件中的組的記錄?

Id Ticket LastChange 
1 369151 2010-03-18 
2 369151 2010-03-18 
11 374173 2010-11-11 
12 374173 2010-11-11 
13 374173 2010-11-11 
54 374173 2014-01-13 
63 374503 2010-11-18 
64 393920 2010-10-15 
65 393920 2010-10-15 
69 393920 2010-10-19 
70 393920 2012-03-29 
71 404145 2011-03-04 
77 404145 2011-03-04 
78 404145 2011-03-10 
79 404145 2011-03-10 
80 404145 2011-03-10 
81 404145 2011-03-28 
82 404145 2011-03-28 
83 404145 2011-03-28 
84 404146 2011-03-04 

我想刪除其票務組一直沒有在過去X月的變化的所有記錄。例如,如果票證374173在過去6個月內沒有LastChange,那麼使用票證374173刪除表格中的所有記錄。

我可以用荒謬的組查詢,聯接,子查詢,子查詢,刪除來做到這一點,但似乎過分複雜。我認爲分區可能是一種更簡單的方法,但對於TSQL來說還是新的。任何幫助是極大的讚賞。謝謝。

回答

1

您可以使用子查詢來獲取要刪除的票證。修改「最近6個月」的部分以滿足您的確切需求。

DELETE FROM table1 
WHERE Ticket IN 
    (SELECT Ticket FROM table1 
    GROUP BY Ticket 
    HAVING MAX(LastChange) < DATEADD(month, -6, GETDATE())) 
1

我會用一個簡單的NOT EXISTS

DELETE t1 FROM dbo.Table1 t1 
WHERE NOT EXISTS 
(
    SELECT 1 FROM dbo.Table1 t2 
    WHERE t1.Ticket = t2.Ticket 
    AND Datediff(Month, t2.LastChange, GETDATE()) <= 6 
) 

Demo

其實374173是唯一的票證集團在過去6個月的變化,使所有其他記錄都被刪除。這是令人困惑的,因爲你在問題中提到了相反的情況。