gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:56:28 26 4
gpt4 key购买 nike

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

表 A 有 LOCATION、TRANDATE 和 STATUS。

表 B 有 LOCATION、STATUSDATE 和 STATUS

我需要使用表 B 中的 STATUS 列更新表 A 中的 STATUS 列,其中 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com