使用SQL Server代理作业修剪SQL Server 2016数据库表
我在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
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的数据
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语句中执行子查询?这总是让我感到困惑。在何时何地必须这样做,我都感到不舒服。当你开始更频繁地使用它时,你会感到更舒服:-)