我有 2 个类似的查询,它们都在同一个表上工作,我基本上想组合它们的结果,以便第二个查询为第一个查询不返回的内容提供默认值。我在这里尽可能地简化了问题。我正在使用 Oracle 顺便说一句。
该表中包含多个帐户的帐户信息,每个帐户有多个条目,并带有 commit_date 以告知何时插入帐户信息。我需要获取某个日期的最新帐户信息。
查询采用帐户 ID 列表和日期。
这是查询:
-- Select the row which was current for the accounts for the given date. (won't return anything for an account which didn't exist for the given date)
SELECT actr.*
FROM Account_Information actr
WHERE actr.account_id in (30000316, 30000350, 30000351)
AND actr.commit_date <= to_date( '2010-DEC-30','YYYY-MON-DD ')
AND actr.commit_date =
(
SELECT MAX(actrInner.commit_date)
FROM Account_Information actrInner
WHERE actrInner.account_id = actr.account_id
AND actrInner.commit_date <= to_date( '2010-DEC-30','YYYY-MON-DD ')
)
这看起来有点难看,但它为给定日期当前的每个帐户返回一行。问题是如果帐户在给定日期之后才存在,它不会返回任何内容。
为每个帐户选择最早的帐户信息很简单——我不需要为此提供日期:
-- Select the earliest row for the accounts.
SELECT actr.*
FROM Account_Information actr
WHERE actr.account_id in (30000316, 30000350, 30000351)
AND actr.commit_date =
(
SELECT MAX(actrInner .commit_date)
FROM Account_Information actrInner
WHERE actrInner .account_id = actr.account_id
)
但我想以这样的方式合并结果集:
对于每个帐户,如果在第一个结果集中有它的帐户信息 - 使用它。否则,使用第二个结果集中的帐户信息。
我研究了所有我可以使用但没有成功的连接。联合几乎可以做到这一点,但它们只会合并唯一的行。我想根据每行中的帐户 ID 进行合并。
Sql合并两个结果集-我的情况显然比这更复杂
SQL 返回一组合并的结果- 我也许能够适应这种技术?我是一个被迫编写 SQL 的程序员,我不能很好地遵循这个例子,看我如何修改它以满足我的需要。