首页
学习
活动
专区
圈层
工具
发布

甲骨文
EN

Stack Overflow用户
提问于 2011-04-21 07:16:07
回答 3查看 36K关注 0票数 6

我正在试着从另一张表中选择最新的价格。但我想不出怎么让它起作用。

这就是我尝试过的:

代码语言:javascript
复制
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":无效标识符

更新:

目前的解决办法:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-21 08:13:34

在Oracle中,子查询只能从一个层次的父查询中看到值。由于有两个嵌套的选择,内部选择看不到外部的值。

您可以先执行连接:

代码语言:javascript
复制
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

票数 6
EN

Stack Overflow用户

发布于 2011-04-21 07:19:49

尝试在最外层的查询中混叠article_table

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2011-04-21 08:35:12

我将尝试以下几点:

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5740813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档