我正在尝试从子选择中的另一个表中选择最新价格。但我不知道如何让它发挥作用。
这是我尝试过的:
select something, somthingelse,
(
select * from
(
select QUOTE_PRICE as old_price
from price_history
where price_history.part_no= article_table.part_no
order by valid_from desc
) where rownum=1
)
from article_table where rownum < 5
子选择本身有效,但找不到article_table.part_no
:
SQL 错误:ORA-00904:“article_table”。“part_no”:无效标识符
Update:
目前的解决方案:
select something, somethingelse, (
SELECT MIN(QUOTE_PRICE) KEEP (DENSE_RANK FIRST ORDER BY valid_from)
FROM price_history
WHERE part_no=article_table.part_no
) as old_price
from article_table a where rownum < 5
在 Oracle 中,子查询只能看到一层深度的父查询的值。由于您有两个嵌套选择,内部选择无法看到外部选择的值。
您可以先执行连接:
SELECT something, somthingelse, old_price
FROM (SELECT a.something, a.somthingelse, p.quote_price old_price,
row_number() over (PARTITION BY a.part_no
ORDER BY valid_from DESC) rnk
FROM article_table a
LEFT JOIN price_history p ON a.part_no = p.part_no)
WHERE rnk = 1;
您还可以使用 PL/SQL 函数来返回第一个quote_price
from price_history
当给定一个article_table.part_no
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)