sql - 使用另一个表的最大日期更新一个表

标签 sql oracle plsql

在 Oracle 10g 中,我需要使用表 B 中的数据更新表 A。

表 A 包含位置、交易日期和状态。

表 B 包含 LOCATION、STATUSDATE 和 STATUS

我需要使用表 B 中的状态列更新表 A 中的状态列,其中 STATUSDATE 是截至并包括该位置的 TRANDATE 的最大日期(基本上,我正在获取当时位置的状态特定交易)。

我有一个 PL/SQL 过程可以做到这一点,但我知道必须有一种方法可以使用分析让它工作,而且我已经绞尽脑汁了。

谢谢!

最佳答案

这应该可以帮助您开始(这里的 MAX 函数是聚合函数,而不是分析函数):

UPDATE table_a
   SET status = (SELECT MAX(table_b.status) 
                        KEEP (DENSE_RANK FIRST ORDER BY table_b.statusdate DESC)
                   FROM table_b
                  WHERE table_a.location = table_b.location
                    AND table_b.statusdate <= table_a.trandate);

这将更新 table_a 中的所有行,即使 table_b 中没有先前的行,在这种情况下也会将状态更新为 NULL。如果您只想更新 table_a 中与 table_b 中具有相应匹配项的行,则可以添加过滤器:

UPDATE table_a
   SET status = (SELECT MAX(table_b.status) 
                        KEEP (DENSE_RANK FIRST ORDER BY table_b.statusdate DESC)
                   FROM table_b
                  WHERE table_a.location = table_b.location
                    AND table_b.statusdate <= table_a.trandate)
 WHERE EXISTS (SELECT NULL
                 FROM table_b
                WHERE table_a.location = table_b.location
                  AND table_b.statusdate <= table_a.trandate);

关于sql - 使用另一个表的最大日期更新一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2478849/

相关文章:

python matplotlib 散点图

oracle - ORA-01008 : not all variables bound (in table adapter with parameterized query)

mysql - Oracle SQL 触发器更新问题 - 研究/学习

oracle - PLSQL中根据条件(其他变量的值)为变量赋值

php - MYSQL:创建查询以显示条目的父级/层次结构(面包屑)

mysql - 删除重复记录需要太多时间

sql - 如何生成事件节庆日历?

mysql - SQL 交换行值

支持oracle TAF功能的java连接字符串

xml - 使用 PL/SQL 解析大型 XML 文件