sql - 如何编写组合多个表的Oracle Sql Query
问题描述
我有 4 个名为 A、B、C、C_History 的表。以下是每个表包含的内容。cust_id 是所有表的通用标识符。
A - cust_id,status,cust_type
B - cust_id、acnt_nmbr、acnt_systm
C - cust_id、电子邮件、mod_date
C_History - cust_id,email,mod_date(与 C 相同,用于插入在 C 中删除/更新的行)。
我需要编写一个查询,结合以上所有表来提取 A.cust_id、B.acnt_nmbr、C.email(作为新电子邮件)、C_History(作为旧电子邮件)。
这里需要注意的是,A 和 B 表将只有一个 cust_id 记录,但 C 和 C_History 可以有多个 cust_id 电子邮件记录。
因此,从 C 表中,我只需要使用 mod_date(TIMESTAMP 数据类型)最新的单个电子邮件,
而且从 C_Hisory 中,我只需要使用 mod_date 的最新电子邮件,但还有一个条件是,无论从 C_History 中挑选的最新电子邮件,都不应与从 C 中挑选的最新电子邮件相同。
请帮助解决这个问题,因为我从 2 天以来一直在努力解决这个问题。
提前感谢传说。
解决方案
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
推荐阅读
- assembly - AArch64 程序集中未采用无条件分支
- java - Subscene Javafx 中的鼠标偏移
- javascript - 使用 Laravel Livewire 传递隐藏的表单输入
- postgresql - 在 PostgreSQL 中创建触发器时出现语法错误
- python - discord.py 中的 member.kick 函数不起作用
- c++ - 迁移到新的 GCC/Red Hat 版本时 sigvec 的问题
- android - 我想用 GalleryFragment 中的后退图标替换汉堡包图标
- python - 最好使用 Python 比较两个 XML 文件
- java - maven 编译器 3.1 找不到符号
- typo3 - 有什么方法可以将 shopware 6 与 TYPO3 连接起来