【问题标题】:How to write Oracle Sql Query combining multiple tables如何编写组合多个表的Oracle Sql Query
【发布时间】:2021-03-17 02:48:28
【问题描述】:

我有 4 个表,分别称为 A、B、C、C_History。以下是每个表包含的内容。 cust_id 是所有表的通用标识符。

A - cust_id,status,cust_type

B - cust_id,acnt_nmbr,acnt_systm

C - cust_id,email,mod_date

C_History - cust_id,email,mod_date(与C相同,用于插入在C中被删除/更新的行)。

我需要编写一个查询结合以上所有表来提取 A.cust_id、B.acnt_nmbr、C.email(As New Email)、C_History(As Old Email)。

这里需要注意的是,A 和 B 表将只有一个 cust_id 记录,但 C 和 C_History 可以有多个电子邮件记录用于 cust_id。

所以从 C 表中,我只需要使用 mod_date(TIMESTAMP 数据类型)最新的单个电子邮件,

同样来自 C_Hisory,我只需要使用 mod_date 的最新电子邮件,但还有一个条件是,无论从 C_History 中选择的最新电子邮件,都不应与从 C 中选择的最新电子邮件相同。

请帮助解决这个问题,因为我在 2 天后一直在努力解决这个问题。

提前感谢传说。

【问题讨论】:

  • 你试过什么SQL?
  • 我用的是oracle sql developer,数据库是Oracle 12c

标签: sql oracle oracle12c


【解决方案1】:
SELECT A.cust_id
    ,B.acnt_nmbr
    ,C.email
    ,C_History.email
FROM A
    ,B
    ,(
        SELECT cust_id
            ,MAX(email) KEEP (
                DENSE_RANK LAST ORDER BY mod_date
                ) OVER (PARTITION BY cust_id)
        FROM c
        ) c
    ,(
        SELECT cust_id
            ,MAX(email) KEEP (
                DENSE_RANK LAST ORDER BY mod_date
                ) OVER (PARTITION BY cust_id)
        FROM c_history
        ) c_history
WHERE a.cust_id = b.cust_id
    AND c_history.cust_id = a.cust_id
    AND c.cust_id = a.cust_id

【讨论】:

  • 感谢 Rama,但上述查询无效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
相关资源
最近更新 更多