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

Oracle如何通过单查询统计单日数据中求和值最高的对应小时

Oracle按小时聚合取最高值解决方案

完全可以通过单个Oracle查询实现需求,无需额外脚本处理或多次循环查询,执行效率远高于数组、脚本迂回实现的方案。

核心实现逻辑

  1. 提取时间字段的小时维度作为分组依据
  2. 按小时分组对Value字段求和
  3. 对求和结果倒序排序后取第一条,即为求和值最高的小时和对应结果

适配场景的SQL示例

场景1:Time字段为VARCHAR2类型(存储格式为HH:MI,适配你提供的样例数据)

SELECT hour, sum_value
FROM (
    SELECT 
        SUBSTR(Time, 1, 2) AS hour,
        SUM(Value) AS sum_value
    FROM "table"
    -- 如需限定单日统计,可补充对应日期过滤条件,示例:WHERE TRUNC(记录日期字段) = TO_DATE('2024-05-20','YYYY-MM-DD')
    GROUP BY SUBSTR(Time, 1, 2)
    ORDER BY sum_value DESC
)
WHERE ROWNUM = 1;

场景2:Time字段为DATE/TIMESTAMP类型

只需将提取小时的逻辑替换为TO_CHAR函数即可:

SELECT hour, sum_value
FROM (
    SELECT 
        TO_CHAR(Time, 'HH24') AS hour,
        SUM(Value) AS sum_value
    FROM "table"
    GROUP BY TO_CHAR(Time, 'HH24')
    ORDER BY sum_value DESC
)
WHERE ROWNUM = 1;

特殊场景:需返回所有并列最高的小时

如果存在多个小时求和值相同且均为最高的情况,可以使用RANK()窗口函数实现:

SELECT hour, sum_value
FROM (
    SELECT 
        SUBSTR(Time, 1, 2) AS hour,
        SUM(Value) AS sum_value,
        RANK() OVER(ORDER BY SUM(Value) DESC) AS rank_num
    FROM "table"
    GROUP BY SUBSTR(Time, 1, 2)
)
WHERE rank_num = 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:15:02