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

SQL Server中将15分钟间隔数据按小时粒度聚合的实现方法问询

问题背景

现有SQL Server中存储15分钟间隔销售数据的数据表,表结构及示例数据如下:

StartDate   Start       End         Sales
==============================================
2020-08-25  00:00:00    00:15:00    291.4200
2020-08-25  00:15:00    00:30:00    401.1700
2020-08-25  00:30:00    00:45:00    308.3300
2020-08-25  00:45:00    01:00:00    518.3200
2020-08-25  01:00:00    01:15:00    247.3700
2020-08-25  01:15:00    01:30:00    115.4700
2020-08-25  01:30:00    01:45:00    342.3800
2020-08-25  01:45:00    02:00:00    233.0900
2020-08-25  02:00:00    02:15:00    303.3400
2020-08-25  02:15:00    02:30:00    11.9000
2020-08-25  02:30:00    02:45:00    115.2400
2020-08-25  02:45:00    03:00:00    199.5200
2020-08-25  06:00:00    06:15:00    0.0000
2020-08-25  06:15:00    06:30:00    45.2400
2020-08-25  06:30:00    06:45:00    30.4800
2020-08-25  06:45:00    07:00:00    0.0000
2020-08-25  07:00:00    07:15:00    0.0000
2020-08-25  07:15:00    07:30:00    69.2800

需求为基于表中的Start、End时间列,将15分钟间隔的数据集分组为1小时时间间隔的聚合数据。

实现方案

完全可以实现,核心逻辑是将属于同一日期、同一整小时的15分钟数据划分为一组,对销售额做求和聚合,同时生成对应小时区间的起止时间即可。

具体SQL实现(SQL Server语法)

SELECT
    StartDate,
    -- 生成小时区间的开始时间(整小时)
    DATEADD(HOUR, DATEPART(HOUR, [Start]), CAST(StartDate AS DATETIME)) AS HourStart,
    -- 生成小时区间的结束时间(开始时间加1小时)
    DATEADD(HOUR, 1, DATEADD(HOUR, DATEPART(HOUR, [Start]), CAST(StartDate AS DATETIME))) AS HourEnd,
    -- 聚合该小时内的总销售额
    SUM(Sales) AS TotalSales
FROM
    你的表名 -- 替换为实际业务表名
GROUP BY
    StartDate,
    DATEPART(HOUR, [Start]) -- 按日期+小时维度分组
ORDER BY
    StartDate,
    HourStart

效果说明

以上述示例数据为例,聚合后0点整小时(00:00:00~01:00:00)的总销售额为291.42+401.17+308.33+518.32=1519.24,和实际计算结果一致。如果某小时内缺少部分15分钟区间的数据(比如示例中3点到6点无数据),聚合结果中不会自动生成该小时的记录,如需补全缺失的小时区间,可以额外关联小时维度表实现。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:54:02