Привет
Подскажите что не так с запросом, ругается на ORA-00920: invalid relational operator
SELECT * FROM rpm_future_retail where (item, location, action_date) IN
(select item, location, MAX(ACTION_DATE) action_date from rpm_future_retail
group by item, location HAVING MAX(action_date) < SYSDATE order by item)
На всякий случай укажу тут еще вариант решения до которого сам в итоге дошел:
CREATE VIEW EX6
AS SELECT item, LOCATION, MAX(action_date) action_date FROM rpm_future_retail
GROUP BY item, location HAVING MAX(action_date) <= SYSDATE ORDER BY item;
SELECT ex6.item, ex6.location, ex6.action_date, rpm_future_retail.selling_retail actual_price FROM ex6
LEFT JOIN rpm_future_retail ON ex6.item = rpm_future_retail.item AND ex6.location = rpm_future_retail.location AND ex6.action_date = rpm_future_retail.action_date;
where (item, location, action_date) IN
(select item, location, MAX(ACTION_DATE) action_date from rpm_future_retail
group by item, location HAVING MAX(action_date) < SYSDATE order by item)
Это вообще законно? Я конечно понимаю, что вы имели ввиду, но помоему в sql так нельзя. Могу конечно ошибаться, поэтому пишу это здесь в комментарии, а не в ответе.
SELECT t1.*
FROM rpm_future_retail t1
INNER JOIN (
select item, location, MAX(ACTION_DATE) action_date
from rpm_future_retail
group by item, location
HAVING MAX(action_date) < SYSDATE order by item
) t2 ON (t1.item = t2.item and t1.location = t2.location and t1.action_date = t2.action_date)
upd. Ответ не правильный.
Вы неправильно используете оператор in where (item, location, action_date) IN
Оператор должен использоваться для одного поля, а вы указываете несколько.
Вы неправы. Обратите внимание на вторую диаграмму - она явно описывает набор expr, перечисленных через запятую.
А если перейти по ссылке в Expression List - то там самый первый пример прям-таки один в один.
idShura, Ну вообще тут Оракл, как обычно, выступил поперёк. Другие СУБД называют такую штуку Row constructor. Т.е. список выражений (обычно в скобках) формирует как бы временный набор записей (из одной, если там скаляр, либо из нескольких, если подзапрос).