我在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的数据。
我没有SQL经验,并希望获得有关如何进行查询的一些指导。
有人可以建议如何在Job Agent中设置工作来执行此操作吗?
我想我可以弄清楚如何使用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 :(得分: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
)