首页 > 解决方案 > Oracle查询 - 如果返回多条记录,则获取最新记录

问题描述

我在使用 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_ID和的结合EVENTCODE是独一无二的;发现事实并非如此。

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

标签: sqloracleselectoracle12c

解决方案


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

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;

推荐阅读