如何编写SQL WHERE子句查询近1个月且排除本周的数据
筛选逻辑优化方案
你现有代码已经完成了最近1个月的日期筛选,只需要在WHERE子句中追加排除本周的条件即可,不需要用到datepart、getdate函数,适配你当前的SQL运行环境。
修改后完整SQL
select * from `table` where -- 筛选最近1个月数据:保留当前月往前推1个月之后的记录 DATE(date) > DATE_SUB(DATE_TRUNC(CURRENT_DATE(), month), INTERVAL 1 month ) -- 排除本周数据:仅保留日期早于本周第一天的记录 AND DATE(date) < DATE_TRUNC(CURRENT_DATE(), week)
逻辑说明
DATE_TRUNC(CURRENT_DATE(), week)会返回当前周的起始日期,不同数据库默认周起始规则可能有区别(部分默认周一为周起始,部分默认周日为周起始),如果需要调整周起始规则,可对应修改DATE_TRUNC的周参数即可- 只要业务数据日期小于本周起始日期,就会自动排除整周的所有数据,和你原有筛选逻辑完全兼容
- 按你提供的样例数据测试:若当前日期为2021-11-25,
DATE_TRUNC(CURRENT_DATE(), week)返回2021-11-22,则id为1的2021-11-25属于本周被过滤,id为2的2021-10-28符合条件被保留,id为3的日期超出1个月范围被过滤,符合需求。
内容的提问来源于stack exchange,提问作者JohWalket
相关产品推荐
相关产品推荐

