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

如何用SQL/PLSQL将非午夜起始的5分钟间隔合并为15分钟并求和

如何用SQL/PLSQL将非午夜起始的5分钟间隔数据合并为15分钟间隔并求和

需求说明

需要将起始时间为非午夜(如00:05、00:20、00:35、00:50)的5分钟时间间隔数据,每3个连续的5分钟合并为15分钟间隔,并对对应数值求和,最终结果以15分钟间隔的结束时间作为分组标识。

示例输入数据

时间间隔数值
00:052
00:103
00:157
00:201
00:257
00:308
00:359
00:4010
00:453
00:501
00:552
00:003

期望输出结果

时间间隔求和值
00:1512
00:3016
00:4522
00:006

SQL实现方案

假设条件

假设数据表名为 interval_data,其中:

  • interval_time:时间间隔字段(类型为 DATE,若为字符串需先转换)
  • 数值:待求和的数值字段

核心SQL语句

SELECT
    TO_CHAR(group_end_time, 'HH24:MI') AS "时间间隔",
    SUM(数值) AS "求和值"
FROM (
    SELECT
        interval_time,
        数值,
        -- 计算当前时间所属的15分钟组结束时间
        TRUNC(interval_time, 'HH24') + NUMTODSINTERVAL(
            FLOOR( (EXTRACT(MINUTE FROM interval_time) + 10) / 15 ) * 15,
            'MINUTE'
        ) AS group_end_time
    FROM interval_data
) t
GROUP BY group_end_time
ORDER BY group_end_time;

逻辑解释

  1. 内层子查询:

    • TRUNC(interval_time, 'HH24'):提取当前时间的整点小时部分(如00:05会转为00:00)
    • EXTRACT(MINUTE FROM interval_time):获取时间的分钟数
    • (分钟数 + 10) / 15:通过偏移10分钟调整分组逻辑,让00:05-00:15的分钟数都归到15分钟组,00:20-00:30归到30分钟组,以此类推
    • FLOOR(...) *15:计算出当前组对应的结束分钟数,再通过NUMTODSINTERVAL转为时间间隔,加到整点时间上得到组结束时间
  2. 外层查询:

    • 按组结束时间分组,对数值求和
    • 用TO_CHAR将时间格式化为HH24:MI的字符串输出

适配字符串类型时间字段

如果interval_time是字符串类型(如VARCHAR2),需要先转换为DATE类型,SQL语句调整为:

SELECT
    TO_CHAR(group_end_time, 'HH24:MI') AS "时间间隔",
    SUM(数值) AS "求和值"
FROM (
    SELECT
        TO_DATE(interval_time, 'HH24:MI') AS interval_time,
        数值,
        TRUNC(TO_DATE(interval_time, 'HH24:MI'), 'HH24') + NUMTODSINTERVAL(
            FLOOR( (EXTRACT(MINUTE FROM TO_DATE(interval_time, 'HH24:MI')) + 10) / 15 ) * 15,
            'MINUTE'
        ) AS group_end_time
    FROM interval_data
) t
GROUP BY group_end_time
ORDER BY group_end_time;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 10:30:00