En Oracle, las subconsultas solo pueden ver valores de consultas principales de un nivel de profundidad. Como tiene dos selecciones anidadas, la interna no puede ver los valores de la externa.
Podrías realizar la unión primero:
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;
También podría usar una función PL/SQL que devolvería el primer quote_price
de price_history
cuando se le da un article_table.part_no
.