Оператор SQL в ClearQuest вызывает ORA-00907: отсутствует правая скобка

Я пытаюсь извлечь данные из ClearQuest, на котором запущена база данных Oracle за симпатичным интерфейсом на основе Eclipse. Используя встроенный построитель запросов, я не могу ограничить объем предоставляемых данных настолько, чтобы я мог добраться туда, куда я хочу.

Моя цель: я хочу извлечь данные из двух таблиц. Таблица 2 имеет отношение многие к одному с таблицей 1. При извлечении данных из базы данных я хочу извлечь самую последнюю запись из таблицы 2, которая имеет отношение к указанному набору записей в таблице 1.

Моя попытка: я начал писать простой запрос, который использовал второй выбор, чтобы получить последнюю запись из Таблицы 2. Я не могу установить сервер оракула на моей машине, и поэтому мне пришлось попробовать запрос в mysql и настроить его для оракула. Это запрос:

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,

Я пытался изменить это все утро и не могу заставить его работать. Что мне не хватает?

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';

Я не мог проверить то же самое. Пожалуйста, вернитесь в случае возникновения проблем

Я не думаю, что номер строки может быть рассчитан до тех пор, пока не будет обработан заказ. Таким образом, он не доступен на этом уровне в рамках дополнительного выбора. Однако если вы используете псевдоним sub select и добавляете where rownum = 1 к внешнему выражению where, оно должно работать.

Другие вопросы по тегам