使用SQL Server代理作业修剪SQL Server 2016数据库表

时间:2017-09-03 00:27:38

标签: sql sql-server

我在SQL Server 2016数据库中有一个如下所示的表:

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. 有人可以建议如何在Job Agent中设置工作来执行此操作吗?

  3. 我想我可以弄清楚如何使用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早于第二个最新日期的所有数据)

2 个答案:

答案 0 :(得分:1)

这个怎么样?其中一种方式:

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

答案 1 :(得分: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
)