SQL查询需求:获取截至今日14天前的近3年订单数据
自动更新日期范围的订单SQL查询方案
核心逻辑说明
你需要的是每日自动计算日期范围的筛选,核心是用数据库的「当前日期函数」动态生成边界,无需手动修改日期。DATE_DIFF确实可用于判断日期差,但它是用来做条件判断的,所以要放在WHERE子句里,而非SELECT(除非你需要把天数差作为结果列展示)。
通用SQL示例(兼容多数数据库)
SELECT * FROM 你的订单表名 WHERE -- 筛选LastValidatedDate为今日往前14天及更早的数据 DATE_DIFF(CURRENT_DATE(), LastValidatedDate, DAY) >= 14 -- 同时限制在近3年范围内 AND LastValidatedDate >= CURRENT_DATE() - INTERVAL 3 YEAR;
不同数据库的适配写法
不同数据库的日期函数略有差异,给你几个常见版本:
- MySQL/MariaDB:
SELECT * FROM 你的订单表名 WHERE DATEDIFF(CURDATE(), LastValidatedDate) >= 14 AND LastValidatedDate >= DATE_SUB(CURDATE(), INTERVAL 3 YEAR);
- SQL Server:
SELECT * FROM 你的订单表名 WHERE DATEDIFF(day, LastValidatedDate, GETDATE()) >= 14 AND LastValidatedDate >= DATEADD(year, -3, GETDATE());
- BigQuery:
SELECT * FROM 你的订单表名 WHERE DATE_DIFF(CURRENT_DATE(), LastValidatedDate, DAY) >= 14 AND LastValidatedDate >= DATE_SUB(CURRENT_DATE(), INTERVAL 3 YEAR);
关键细节解释
- 自动更新的核心:
CURRENT_DATE()/CURDATE()/GETDATE()这些系统函数会自动取查询执行时的当前日期,所以每日刷新时日期边界会自动调整。 - DATE_DIFF的用法:它的作用是计算两个日期的差值,我们用它判断
LastValidatedDate是否早于今日14天以上,因此必须放在WHERE子句里作为筛选条件。如果只是想在结果里显示「距离今日已过去多少天」,才需要把它放在SELECT中。 - 近3年的边界:用当前日期减去3年,确保只取最近3年内符合条件的数据,避免查询过久的历史数据。
内容的提问来源于stack exchange,提问作者KerryW
相关产品推荐
相关产品推荐

