【问题标题】:Oracle query - get latest record if multiple records are returnedOracle查询 - 如果返回多条记录,则获取最新记录
【发布时间】:2019-12-03 23:03:53
【问题描述】:

我在使用 db 链接连接到数据库并定期提取数据以更新本地数据库的包中使用存储过程。它通过将数据拉入“暂存”表中,进行一些处理并更新本地表来实现。

它工作得很好,直到我遇到一个问题,我最终得到多个/重复的记录,这些记录具有不同的 CREATEDON 时间戳但相同的 ITEM_IDEVENTCODE

这是查询的简化版本:

LVSPICKSQL:='INSERT INTO STAGING_TABLE (A, B, ITEM_ID, EVENTCODE, CREATEDON)
SELECT (A, B, ITEM_ID, EVENTCODE, CREATEDON) FROM SOME.DBLINK@BLAH WHERE STATUS=1 AND PCIKEDON IS NULL) WHERE ROWNUM <= 200;

EXECUTE IMMIDIATE LVSPICKSQL;

我认为ITEM_IDEVENTCODE 的组合是独一无二的;发现事实并非如此。

现在,我需要修改此查询,以便如果有多个相同ITEM_IDEVENTCODE 的记录,我选择最新的一条(最新的CREATEDON)。

【问题讨论】:

  • WHERE ROWNUM &lt;= 200没有意义吗?

标签: sql oracle select oracle12c


【解决方案1】:

您可以为此使用窗口函数:

select A, B, ITEM_ID, EVENTCODE, CREATEDON from 
    (select A, B, ITEM_ID, EVENTCODE, CREATEDON, 
                   row_number() over(partition by ITEM_ID, EVENTCODE 
                        order by CREATEDON desc) rn from SOME.DBLINK@BLAH
     where STATUS=1 and PCIKEDON is null
    )
where rn = 1;

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多