MySQL查询调整需求:提取近6个月数据并排除最近两周
调整后的MySQL查询方案
针对你的需求——提取过去6个月的数据但排除最近两个完整周(当前周和上一周),提供两种实现方式:
方式一:基于日期范围排除
适合需要直接排除从两周前到当前所有日期的场景:
SELECT DISTINCT DATE_FORMAT(abc.date, '%d/%m/%Y') AS date_bes FROM `table` abc WHERE abc.date >= CURDATE() - INTERVAL 6 MONTH AND abc.date < CURDATE() - INTERVAL 2 WEEK;
方式二:按周精准排除(匹配你示例的周范围)
如果需要严格排除当前周和上一周的所有数据(不管当前日期是周内第几天),结合年份和周数判断可避免跨年问题:
SELECT DISTINCT DATE_FORMAT(abc.date, '%d/%m/%Y') AS date_bes FROM `table` abc WHERE abc.date >= CURDATE() - INTERVAL 6 MONTH AND CONCAT(YEAR(abc.date), '-', WEEK(abc.date, 1)) NOT IN ( CONCAT(YEAR(CURDATE()), '-', WEEK(CURDATE(), 1)), CONCAT(YEAR(DATE_SUB(CURDATE(), INTERVAL 1 WEEK)), '-', WEEK(DATE_SUB(CURDATE(), INTERVAL 1 WEEK), 1)) );
说明
- 方式一逻辑:保留过去6个月内的数据,直接剔除两周前至今的所有记录,和原查询结果一致,但写法更贴合“排除最近两周”的表述。
- 方式二逻辑:
WEEK(...,1)指定周一为一周起始(和你示例中的周范围匹配),通过年份+周数的组合,精准定位并排除当前周和上一周,跨年场景也能正常工作。
内容的提问来源于stack exchange,提问作者Juji
相关产品推荐
相关产品推荐

