我正在试着从另一张表中选择最新的价格。但我想不出怎么让它起作用。
这就是我尝试过的:
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":无效标识符
更新:
目前的解决办法:
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发布于 2011-04-21 08:13:34
在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。
发布于 2011-04-21 07:19:49
尝试在最外层的查询中混叠article_table:
select a.something, a.somthingelse,
(
select * from
(
select QUOTE_PRICE as old_price
from price_history
where price_history.part_no= a.part_no
order by valid_from desc
) where rownum=1
)
from article_table a where rownum < 5此外,您可能需要查看Oracle分析函数,以便为此目的提供更简单的查询:
http://psoug.org/reference/analytic_functions.html
发布于 2011-04-21 08:35:12
我将尝试以下几点:
select something, somethingelse, last_value(quote_price) over (partition by part_no order by valid_from asc)
from article_table inner join price_history using (part_no)
where rownum < 5;https://stackoverflow.com/questions/5740813
复制相似问题