如何解决删除表中所有少于上一年当前日期的记录,但不要删除过去2年中给定月份的结束日期
比方说,我有一个表,其中仅包含员工姓名和他/她的开始日期。我想删除表中所有少于去年当前日期的记录,但不删除当前日期过去两年中给定月份的结束日期。
例如-如果当前日期为“ 29-SEP-2020”
Emp Date-Started
--- ------------
John 01-SEP-2020
Jane 29-SEP-2019
Adam 28-SEP-2019
Lauren 30-SEP-2019
Caleb 30-SEP-2018
Melanie 27-SEP-2018
Isaac 30-SEP-2017
应该从我的陈述中删除的预期记录应该是
Adam 28-SEP-2019
Melanie 27-SEP-2018
Isaac 30-SEP-2017
同样,请注意,不会删除30-SEP-2019和30-SEP-2018,因为它们仍是9月2020年最后两年范围内的结束日期。 2017年9月30日记录将被删除,因为它不在该范围内。对于所有每日日期,这些记录将从去年的当前日期删除。
解决方法
这可以做到:
DELETE FROM tablename
WHERE DateStarted < ADD_MONTHS(sysdate,-12)
AND DateStarted <> LAST_DAY(ADD_MONTHS(sysdate,-24))
WHERE子句的第一个条件涵盖了不删除上一年当前月份的结束日期的条件。
请参见demo。
结果(剩余的行):
> EMP | DATESTARTED
> :----- | :----------
> John | 01-SEP-20
> Jane | 29-SEP-19
> Lauren | 30-SEP-19
> Caleb | 30-SEP-18
,
您要删除的记录对应于:
select t.*
from t
where date_started >= add_months(sysdate,-24);
如果您确实要删除它们,则可以轻松地将其转换为delete
语句。
您对月末和事情做了很多解释,但这似乎并不重要。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。