sql - Oracle查询 - 如果返回多条记录,则获取最新记录
问题描述
我在使用 db 链接连接到数据库并定期提取数据以更新本地数据库的包内使用存储过程。它通过将数据拉入“暂存”表,进行一些处理和更新本地表来实现。
它工作得很好,直到我遇到一个问题,我最终得到多个/重复记录具有不同的CREATEDON
时间戳但相同ITEM_ID
和EVENTCODE
.
这是查询的淡化版本:
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_ID
and EVENTCODE
,我选择最新的(最新的CREATEDON
)。
解决方案
您可以为此使用窗口函数:
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;
推荐阅读
- r - 如何在不改变水平的情况下改变 R 因子值?
- javascript - 尝试在我的网页中添加 FaceBook 评论插件,为什么在 jquery 中未设置 data-href 属性
- java - instanceof 的使用
在 NetBeans 11.3 + OpenJDK 14 中 - python - 熊猫:为零设置小数位
- reactjs - React - 将 ref 属性作为道具传递
- php - 单击总公司,将打开一个新的公司页面
- vue.js - 在哪里插入Vue.productionTip = false 以摆脱vue开发模式警告
- html - 什么是 ?在分页超链接中
- elasticsearch - Neo4j 与 Elasticsearch 中的全文搜索
- python - ParseException:预期 {SelectQuery | 构造查询 | 描述查询 | AskQuery}(在 char 57 处),(行:3,列:21)