修剪使用SQL Server代理作业
我有一个表在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中。
我没有在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'
在表(即用SYSDATE删除所有数据比第二最新日期的)
这个怎么样?其中一种方法:
SELECT ID, Value, GROUP, SYSDATE
FROM TABLE_A
WHERE SYSDATE IN (SELECT TOP 2 SYSDATE
FROM TABLE_A
ORDER BY SYSDATE DESC);
所以你需要在where语句中做一个子查询?这总是会抛出我。我不知道何时何地必须完成。 – Windstorm1981
当你更频繁地使用它时,你会感觉更舒适:-) – Nayak
子查询获取日期不被删除。
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
)
您可以在问题中添加预期的输出吗? – Nayak
在您的示例数据中,预期的输出将是8/14和8/15的所有内容? – Jason
请参阅编辑。 @Jason是的。 – Windstorm1981