Dans Oracle, les sous-requêtes ne peuvent voir les valeurs des requêtes parentes qu'à un niveau de profondeur. Puisque vous avez deux sélections imbriquées, celle de l'intérieur ne peut pas voir les valeurs de celle de l'extérieur.
Vous pouvez d'abord effectuer la jointure :
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;
Vous pouvez également utiliser une fonction PL/SQL qui renverrait le premier quote_price
de price_history
lorsqu'on lui donne un article_table.part_no
.