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

使用SQL Server代理作业修剪SQL Server 2016数据库表,sql,sql-server,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-0

我在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'
....
该表表示来自同一来源的数据,这些数据通常相同,但可能会更改。所以我每天都拉它

我只想在任何时候保留前两个sysdate的数据

  • 我没有SQL方面的经验,希望能得到一些关于如何进行查询的指导

  • 有人可以建议如何在工作代理中设置一个工作来完成这项工作吗

  • 我想我可以找出如何使用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'
    

    在表中(即,删除系统日期早于第二个最新日期的所有数据)

    这如何?方法之一:

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

    这个怎么样?方法之一:

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

    子查询获取不被删除的日期。
    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
    )     
    

    子查询获取不被删除的日期。
    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
    )     
    

    您能否在问题中添加预期输出?在示例数据中,预期输出将是8/14和8/15之间的所有数据?请参见编辑@Jason yes.@Nayak请参见编辑您能在问题中添加您的预期输出吗?在示例数据中,预期输出将是8/14和8/15之间的所有内容?请参见编辑@Jason yes.@Nayak请参见editSo,您需要在where语句中执行子查询吗?这总是让我感到困惑。我对何时何地必须这样做感到不自在。当您开始更频繁地使用它时,您会感到更自在:-)所以您需要在where语句中执行子查询?这总是让我感到困惑。在何时何地必须这样做,我都感到不舒服。当你开始更频繁地使用它时,你会感到更舒服:-)