No Oracle, as subconsultas só podem ver valores de consultas pai de um nível de profundidade. Como você tem duas seleções aninhadas, a interna não pode ver os valores da externa.
Você pode executar a junção primeiro:
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;
Você também pode usar uma função PL/SQL que retornaria o primeiro
quote_price
de price_history
quando recebe um article_table.part_no
.