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

如何调整SQL查询,仅筛选当前日期过去一年的数据并排除未来日期?

问题说明

我想筛选当前日期过去12个月的数据,当前查询能返回部分目标日期,但同时包含了未来的提前预订假期日期。需要修改SQL语句,使其仅返回当前日期过去一年的数据。

原查询语句

FROM DATABASE.dbo.tbl_Adjustment 
    INNER JOIN DATABASE.dbo.tbldbST01_Personnel 
        ON DATABASE.dbo.tbl_Adjustment.Per_iCurrentID = DATABASE.dbo.tbldbST01_Personnel.Per_lCurrentId
WHERE 
    DATABASE.dbo.tbl_Adjustment.Per_iCurrentID = 257 AND 
    (NOT(DATABASE.dbo.tbl_Adjustment.DsId = N'0')) AND 
    DATABASE.dbo.tbl_Adjustment.AttDate >= GETDATE()-365
ORDER BY DATABASE.dbo.tbl_Adjustment.AttDate DESC

原查询结果

31/05/2024 00:00:00.000
30/05/2024 00:00:00.000
29/05/2024 00:00:00.000
28/05/2024 00:00:00.000
27/05/2024 00:00:00.000
06/05/2024 00:00:00.000
01/04/2024 00:00:00.000
29/03/2024 00:00:00.000
01/01/2024 00:00:00.000
29/12/2023 00:00:00.000
28/12/2023 00:00:00.000
27/12/2023 00:00:00.000
26/12/2023 00:00:00.000
25/12/2023 00:00:00.000
26/09/2023 00:00:00.000
25/09/2023 00:00:00.000

修改后的SQL语句

原查询只限制了日期下限,未设置上限,导致未来日期被纳入结果。另外,GETDATE()-365的计算方式在闰年时会有误差,建议用DATEADD函数精确计算一年前的日期。修改后的语句如下:

FROM DATABASE.dbo.tbl_Adjustment 
    INNER JOIN DATABASE.dbo.tbldbST01_Personnel 
        ON DATABASE.dbo.tbl_Adjustment.Per_iCurrentID = DATABASE.dbo.tbldbST01_Personnel.Per_lCurrentId
WHERE 
    DATABASE.dbo.tbl_Adjustment.Per_iCurrentID = 257 AND 
    (NOT(DATABASE.dbo.tbl_Adjustment.DsId = N'0')) AND 
    DATABASE.dbo.tbl_Adjustment.AttDate >= DATEADD(year, -1, GETDATE()) AND
    DATABASE.dbo.tbl_Adjustment.AttDate <= GETDATE()
ORDER BY DATABASE.dbo.tbl_Adjustment.AttDate DESC

关键修改说明

  1. 添加AttDate <= GETDATE()条件,直接过滤所有晚于当前日期的记录,排除未来的预订数据。
  2. 替换GETDATE()-365为DATEADD(year, -1, GETDATE()),确保无论是否闰年,都能精准获取当前日期往前推一年的时间,避免日期范围出现偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:00:57