Leider ist das so bei SQL, dass ein Select normalerweise viele Sätze zurückgibt.
Nur durch eben deine Methode kannst du gezielt eine einzelne Information bekommen.
In RPG ist das eben so einfach wie du beschreibst.

Einen kleinen Trick gibt es aber schon:

select max(char(datum) || char(Preis)) from datei
where artikel=0815 and datum<='01.03.2005'

Damit erfolgt der Zugriff etwas schneller, du hast den Preis und das DAtum jedoch in einem Feld, dass du allerdings wieder trennen kannst:

with
xpreis as
(select max(char(datum) || char(Preis)) as mpreis from datei
where artikel=0815 and datum<='01.03.2005'
)
select date(substr(mpreis, 1, 10)) as datum, dec(substr(mpreis, 11, 11), 11, 2) as preis
from xpreis

Vorausgesetzt, das Preisfeld ist dec(11, 2).