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

如何在SQL中获取过去12个月每日指定时间窗口并统计对应数值

跨12个月自定义日窗口数据聚合实现方案

以下方案适配你使用的SQL Server语法,和你提供的单日查询逻辑完全兼容:

  • 核心改造逻辑:以5点作为单日统计的分界点,把每条数据的startdate减去5小时,得到的日期即可对应到所属的统计窗口基准,再按该基准分组即可批量完成全周期的窗口求和。
  • 可直接运行的SQL示例(替换求和字段即可):
SELECT 
    -- 生成当前数据所属窗口的起止时间
    SMALLDATETIMEFROMPARTS(
        YEAR(DATEADD(HOUR, -5, startdate)), 
        MONTH(DATEADD(HOUR, -5, startdate)), 
        DAY(DATEADD(HOUR, -5, startdate)), 
        5, 0
    ) AS window_start,
    SMALLDATETIMEFROMPARTS(
        YEAR(DATEADD(HOUR, -5, startdate)), 
        MONTH(DATEADD(HOUR, -5, startdate)), 
        DAY(DATEADD(HOUR, -5, startdate)) + 1, 
        5, 0
    ) AS window_end,
    SUM(需要汇总的数值字段) AS total_value -- 替换为你实际要求和的字段名
FROM TableX
WHERE 
    -- 筛选范围:从当前时间往前推12个月的最早窗口,到今日最新窗口截止
    startdate >= DATEADD(YEAR, -1, SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()), 5, 0))
    AND enddate <= SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()), 5, 0)
GROUP BY 
    YEAR(DATEADD(HOUR, -5, startdate)),
    MONTH(DATEADD(HOUR, -5, startdate)),
    DAY(DATEADD(HOUR, -5, startdate))
ORDER BY window_start

逻辑验证说明:例如时间2021-11-15 04:59:59减去5小时后得到2021-11-14 23:59:59,会被归类到2021-11-14 05:00~2021-11-15 05:00窗口,和你原单日查询的规则完全匹配。

  • 注意事项:如果数据时间带时区,需要先统一转换为和GETDATE()一致的时区再做计算,避免窗口偏移错误;不需要返回窗口起止时间的话,GROUP BY部分可以简化为CAST(DATEADD(HOUR, -5, startdate) AS DATE),写法更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:24:03