gpt4 book ai didi

SQL 在唯一列值上合并结果集

转载 作者:行者123 更新时间:2023-12-04 14:15:06 25 4
gpt4 key购买 nike

我有 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 Merging two result sets - 我的情况显然比那更复杂

SQL to return a merged set of results - 我也许能够适应这种技术?我是一名被迫编写 SQL 的程序员,但我无法很好地遵循该示例以了解如何根据需要修改它。

最佳答案

执行此操作的标准方法是使用左外部连接和合并。也就是说,您的整体查询将如下所示:

SELECT ...
FROM defaultQuery
LEFT OUTER JOIN currentQuery ON ...

如果您执行SELECT *,每一行将对应当前帐户数据加上您的默认值。到目前为止和我在一起吗?

现在,不是SELECT *,而是针对要返回的每一列,对匹配的列对执行COALESCE():

SELECT COALESCE(currentQuery.columnA, defaultQuery.columnA) ...

这将选择当前帐户数据(如果存在),否则将选择默认数据。

关于SQL 在唯一列值上合并结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15238477/

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