所以,我在各种论坛和资源网站上对此进行了相当多的阅读,但尚未找到我认为适用于我的案例的解决方案。而且,我无法相信这证明是多么困难;我认为这种查询会相当普遍。
基本上我在这里做的是通过union查询两个历史表(tbl_b和tbl_c)的特定里程碑日期 - 可能有多个结果...我希望找到最新的这些结果,使用最大值然后,此日期将作为主查询中的列返回。
我的问题是,在第3层子查询中,我需要从顶部查询(tbl_a)中的表中引用标识符值。
我知道相关查询只能引用他们的父查询 - 所以,我被卡住了。
修改1 我搜索的目标日期很可能(但不一定)在结果集中是唯一的。它是数据记录的时间戳。我正在寻找历史上与tbl_a中每列相关的最新条目。为此创建一个SQL小提琴。
见下面的示例:
select tbl_a.col_a,
tbl_a.col_b,
(
select max(target_date)
from
(
select tbl_b.target_date
from tbl_b
where tbl_b.tbl_a_id = tbl_a.id and
tbl_b.flag = 1 and
tbl_b.milestone_id = tbl_a.milestone_id
union
select tbl_c.target_date
from tbl_c
where tbl_c.tbl_a_id = tbl_a.id and
tbl_c.flag = 1 and
tbl_c.milestone_id = tbl_a.milestone_id
) most_recent_target_date
)
from tbl_a
答案 0 :(得分:0)
以这种方式将此查询转换为联接:
select tbl_a.col_a,
tbl_a.col_b,
max(most_recent_target_date.target_date)
from tbl_a
join (
select tbl_b.target_date, tbl_b.date_id
from tbl_b
where tbl_b.flag = 1
union all
select tbl_c.target_date, tbl_c.date_id
from tbl_c
where tbl_c.flag = 1
) most_recent_target_date
ON tbl_a.date_id = most_recent_target_date.date_id
GROUP BY tbl_a.col_a,
tbl_a.col_b