0

我正在尝试从 ClearQuest 中提取数据,它在基于 Eclipse 的前端运行一个 Oracle 数据库。使用内置的查询构建器,我无法限制提供的数据足以让我到达我想要的地方。

我的目标:我希望从两个表中提取数据。表 2 与表 1 具有多对一的关系。从数据库中提取数据时,我希望从表 2 中提取与表 1 中的指定记录集有关系的最新记录。

我的尝试:我开始编写一个简单的查询,该查询使用第二次选择从表 2 中获取最新记录。我无法在我的机器上设置 oracle 服务器,因此不得不在 mysql 中尝试查询并针对 oracle 进行调整。这是查询:

select t1.id, t1.name, t2.set_date
from test_table t1, link_table t2
where t2.test_id = t1.id
      and t2.set_date = (select set_date
                         from link_table
                         where t1.id = test_id
                         order by set_date desc
                         limit 1)
      and t1.state = 'Closed';

在 MySQL 中运行它可以正常工作!更改查询以匹配 Oracle 标准给了我这个;

SELECT t1.id,t1.name,t2.set_date 
FROM   test_table t1,link_table t2 
WHERE  t2.test_id = t1.id 
       AND t2.set_date = (SELECT set_date 
                          FROM   link_table 
                          WHERE  t1.id = test_id 
                                 AND ROWNUM = 1 
                          ORDER  BY set_date DESC) 
       AND t1.state = 'Closed'; 

在测试通过 Oracle Formatter (例如Instant SQL Formatter)运行它时,它运行良好。但是,当将查询输入 ClearQuest 以提取数据时,它给了我错误;ORA-00907: missing right parenthesis.

我整个早上都在尝试更改它,但无法使其正常工作。我错过了什么?

4

2 回答 2

2

你能试试下面的代码吗: - 与嵌套查询相比,使用分析查询提高性能。

   select t1.id,t1.name,t2.set_date 
FROM   test_table t1,(select * from (select set_date,test_id,row_number() over (partition by test_id order by set_date desc ) rn from link_table) where rn =1) t2 
WHERE  t2.test_id = t1.id AND t1.state = 'Closed';

我无法测试相同的。遇到问题请回复

于 2013-10-25T11:17:24.483 回答
0

我认为在处理 order by 之前无法计算行号。因此,它在子选择中的该级别不可用。但是,如果您为 sub 选择别名并将 where rownum = 1 添加到外部 where 子句,它应该可以工作。

于 2013-10-25T11:16:16.440 回答