In Oracle, le sottoquery possono vedere solo i valori delle query padre a un livello di profondità. Dato che hai due selezioni nidificate, quella interna non può vedere i valori di quella esterna.
Potresti prima eseguire il join:
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;
Potresti anche usare una funzione PL/SQL che restituisca il primo quote_price
da price_history
quando viene fornito un article_table.part_no
.