2017-09-03 108 views
0

我有一個表在SQL Server 2016數據庫,看起來像這樣一個SQL Server 2016數據庫表:修剪使用SQL Server代理作業

ID  Value Group  SYSDATE 
-------------------------------------  
1  85  X  '2017-08-15' 
2  87  Y  '2017-08-15' 
3  934  Z  '2017-08-15' 
4  85  X  '2017-08-14' 
5  87  Y  '2017-08-14' 
6  934  Z  '2017-08-14' 
7  85  X  '2017-08-13' 
8  87  Y  '2017-08-13' 
9  934  Z  '2017-08-13' 
7  85  X  '2017-08-12' 
8  87  Y  '2017-08-12' 
9  934  Z  '2017-08-12' 
.... 

的表是從通常是相同的相同的源數據但可能會改變。所以我每天都拉它。

我只想隨時將數據保留在前兩位SYSDATES中。

  1. 我沒有在SQL方面經驗豐富,並且希望得到關於如何執行查詢的一些指導。

  2. 有人可以建議如何在工作代理中設置一個工作來做到這一點?

我想我可以弄清楚如何使用MAX得到最高的一個SYSDATE信息,但不是最高的兩個日期。

任何幫助/指導/方向讚賞。

編輯

所需的輸出:

ID  Value Group  SYSDATE 
------------------------------------ 
1  85  X  '2017-08-15' 
2  87  Y  '2017-08-15' 
3  934  Z  '2017-08-15' 
4  85  X  '2017-08-14' 
5  87  Y  '2017-08-14' 
6  934  Z  '2017-08-14' 

在表(即用SYSDATE刪除所有數據比第二最新日期的)

+0

您可以在問題中添加預期的輸出嗎? – Nayak

+0

在您的示例數據中,預期的輸出將是8/14和8/15的所有內容? – Jason

+0

請參閱編輯。 @Jason是的。 – Windstorm1981

回答

1

這個怎麼樣?其中一種方法:

SELECT ID, Value, GROUP, SYSDATE 
FROM TABLE_A 
WHERE SYSDATE IN (SELECT TOP 2 SYSDATE 
        FROM TABLE_A 
        ORDER BY SYSDATE DESC); 
+0

所以你需要在where語句中做一個子查詢?這總是會拋出我。我不知道何時何地必須完成。 – Windstorm1981

+1

當你更頻繁地使用它時,你會感覺更舒適:-) – Nayak

1

子查詢獲取日期不被刪除。
where子句檢查不被刪除的日期。

DELETE TABLE_A 
SELECT * 
FROM TABLE_A 
WHERE CAST(SysDate AS DATE) NOT IN 
(
    SELECT TOP 2 dates 
    FROM 
    (
     SELECT DISTINCT CAST(SysDate AS DATE) AS dates 
     FROM TABLE_A 
    ) AS Dates 
    ORDER BY dates desc 
)