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

如何编写SQL查询获取给定日期三个月前含月初的数据?

计算指定日期对应时间段数据的SQL实现指导

需求

给定一个目标日期,需查询两类数据:

  • 目标日期往前推3个月所在月份的所有数据
  • 目标日期上年同月的所有数据
    需包含对应月份的全量数据(含月初记录)。

样本数据集

Date,value
28-12-2022,10
31-01-2023,32
30-10-2023,33
30-11-2023,32
30-12-2023,31
31-01-2024,01
29-02-2024,02

示例场景

当目标日期为31-01-2024时,预期输出:

Date,value
31-01-2023,32
30-10-2023,33

错误查询分析

之前尝试直接通过月份和年份硬匹配的写法存在逻辑错误,比如错误语句中把目标日期的月份当成了3,导致筛选条件完全不符合需求:

Declare date1 date= '31-01-2024'

select * from table where MONTH(date1) = 3 AND YEAR(Date) = YEAR(date1) - 1 

正确SQL实现(SQL Server)

通过日期函数精准计算目标时间段,再匹配对应月份的数据:

DECLARE @target_date DATE = '31-01-2024';

SELECT Date, value
FROM your_table_name
WHERE 
    DATEFROMPARTS(YEAR(Date), MONTH(Date), 1) IN (
        -- 目标日期往前推3个月的当月第一天
        DATEFROMPARTS(YEAR(DATEADD(month, -3, @target_date)), MONTH(DATEADD(month, -3, @target_date)), 1),
        -- 目标日期上年同月的当月第一天
        DATEFROMPARTS(YEAR(DATEADD(year, -1, @target_date)), MONTH(DATEADD(year, -1, @target_date)), 1)
    )
ORDER BY Date DESC;

说明

  1. DATEADD(month, -3, @target_date):计算目标日期往前推3个月的日期
  2. DATEADD(year, -1, @target_date):计算目标日期上年同月的日期
  3. DATEFROMPARTS(...):将日期转换为当月第一天,用于统一匹配整个月份的记录
  4. 最终筛选出属于这两个月份的所有数据,按日期倒序排列

内容的提问来源于stack exchange,提问作者Mahendran V M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:53:24