首页 > 解决方案 > ORACLE SQL:查找列中的最后一行,然后从另一个数据更新数据而不影响旧数据

问题描述

我目前正在学习用 Oracle SQL 编写代码。参考我所附照片上的示例,我想在我的脚本中查找表 A 中的最后日期,如果日期(表 A)小于表 B 中的日期,则仅将表 B 中的最新日期数据插入 A不影响表 A 中较早的日期数据。

表格示例.

原因是因为表 B 的数据是按月存储的,这意味着到 2 月份时,1 月份的数据将被清除。所以表 A 的目的是保留表 B 中我想要的所有数据。

以及如何将脚本嵌入到表中以便它每天自动运行?

标签: sqloracle

解决方案


如果我理解正确,在 Oracle 12c+ 中,您可以使用:

insert into a (date, sales)
    select date, sales
    from b
    where b.date > (select max(a.date) from a)
    order by date desc
    fetch first 1 row only;

order byfetch确保只插入最近的行。

在早期版本中,您可以使用子查询:

insert into a (date, sales)
    select date, sales
    from (select b.*, row_number() over (order by date desc) as seqnum
          from b
          where b.date > (select max(a.date) from a)            
         ) b
    where seqnum = 1;

注意:如果您每天运行此代码,您最终只会将每一行插入ba. 我假设你知道这一点。


推荐阅读