首页 > 解决方案 > ORACLE - 获取每小时的最后一条记录

问题描述

我有一个日期时间字段,有时它会检索我重复的数据,我每小时需要一条记录,因为如果相同的 objectid 在同一小时有 3 条记录,例如晚上 11 点,我需要从该小时示例记录 1 中获取最后一条记录晚上 11:05 记录 2 晚上 11:35 记录 3 晚上 11:55

只选择从晚上 11:55 开始的记录,每小时的最后一条记录,可能是 objectid 在不同的时间有更多的记录,但我每小时只需要一条记录,选择最后一条记录更多的分钟。任何想法?如果我使用最大值,每个 objectid 只会获得一条记录,我需要每小时一条记录。

select *
from   prod.WX_RAW
where  trunc(datetimeutc,'DD') = to_date('01-01-2021')
and    objectid=10000355399 
and    TEMP_CODE NOT IN ('7','2','3','R','U')
and    OBS_TYPEID IN ('7', '4', '6')
and    REPORTTYPE = 'FM-15'
ORDER BY DATETIMEUTc;

示例数据:

object id.  datetimeutc                     obstype country code.   wind direction
10000355399 1/1/2021 11:15:00.000000000 PM  7       KCLK    V020    340  N
10000355399 1/1/2021 11:35:00.000000000 PM  7       KCLK    V020    350  N
10000355399 1/1/2021 11:55:00.000000000 PM  7       KCLK    V020    360  N

标签: sqloracledatetimegreatest-n-per-group

解决方案


您可以使用:

SELECT *
FROM   (
  select w.*,
         ROW_NUMBER() OVER (
           PARTITION BY objectid, TRUNC(datetimeutc, 'HH')
           ORDER BY datetimeutc DESC
         ) AS rn
  from   prod.WX_RAW w
  where  trunc(datetimeutc,'DD') = DATE '2021-01-01'
  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;

db<>在这里摆弄


推荐阅读