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

Oracle如何实现同一objectid按小时分组取该时段最后一条记录

实现方案

可通过窗口函数ROW_NUMBER()实现按小时分组去重,核心逻辑是对同一个objectid、同一个小时的所有记录按datetimeutc倒序排序,取排序后第1条的记录即可,改写后的SQL如下:

SELECT *
FROM (
    SELECT 
        t.*,
        ROW_NUMBER() OVER (
            PARTITION BY objectid, TRUNC(datetimeutc, 'HH24') 
            ORDER BY datetimeutc DESC
        ) AS rn
    FROM prod.WX_RAW t
    WHERE TRUNC(datetimeutc, 'DD') = TO_DATE('01-01-2021', 'DD-MM-YYYY')
      AND objectid = 10000355399 
      AND TEMP_CODE NOT IN ('7','2','3','R','U')
      AND OBS_TYPEID IN ('7', '4', '6')
      AND REPORTTYPE = 'FM-15'
)
WHERE rn = 1
ORDER BY datetimeutc;

关键逻辑说明

  • PARTITION BY objectid, TRUNC(datetimeutc, 'HH24') 按objectid和小时维度分组,同一objectid的同一小时数据会被分到同一个分区
  • ORDER BY datetimeutc DESC 将每个分区内的记录按时间从晚到早排序,最晚的那条记录排序值为1
  • 外层过滤rn = 1,仅保留每个小时最晚的1条记录

你给出的示例数据中,2021年1月1日23点的三条记录经过上述逻辑处理后,只会保留23:55对应的那条数据,完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:51:03