You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL技术求助:如何获取每月1日回溯45天的事件记录?

解决方案

核心思路是先确定当月第一天作为基准时间,再计算该基准日期往前推45天的时间点,最终筛选createddate早于这个时间点的记录。以下是主流数据库的实现代码:

MySQL/MariaDB

SELECT incidentnumber
FROM Incident
WHERE createddate < DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 45 DAY);
  • DATE_FORMAT(CURDATE(), '%Y-%m-01'):提取当前日期所在月份的第一天(比如6月12日运行时返回'2024-06-01')
  • DATE_SUB(..., INTERVAL 45 DAY):将当月第一天往前推45天,得到筛选的截止时间

PostgreSQL

SELECT incidentnumber
FROM Incident
WHERE createddate < DATE_TRUNC('month', CURRENT_DATE) - INTERVAL '45 days';
  • DATE_TRUNC('month', CURRENT_DATE):将当前日期截断到月份维度,直接得到当月第一天
  • 通过- INTERVAL '45 days'直接计算45天前的时间点

SQL Server

SELECT incidentnumber
FROM Incident
WHERE createddate < DATEADD(DAY, -45, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1));
  • DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1):拼接当前年份、月份和1号,生成当月第一天
  • DATEADD(DAY, -45, ...):将基准日期往前推45天

Oracle

SELECT incidentnumber
FROM Incident
WHERE createddate < TRUNC(SYSDATE, 'MM') - INTERVAL '45' DAY;
  • TRUNC(SYSDATE, 'MM'):截断系统日期到当月第一天
  • - INTERVAL '45' DAY:直接减去45天得到筛选截止时间

逻辑验证

以你提到的6月12日运行报表为例:上述语句会先获取6月1日,再计算出6月1日减45天的日期(平年为4月17日),最终筛选出createddate早于该日期的记录,完全匹配你的需求。

内容的提问来源于stack exchange,提问作者Angus Thermopily

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 16:37:40