我正在尝试从子选择的另一个表中选择最新价格。但是我不知道如何使它工作。
这是我尝试过的:
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:
article_table.part_no
SQL错误:ORA-00904:“ article_table”。“ part_no”:无效的标识符
更新:
当前解决方案:
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从price_history时提供的article_table.part_no。
quote_price
price_history