Reports 6 - древняя штука.
И order by в подзапросах, и аналитику в статическом sql не понимает.
Тут можно посчитать строки вручную.
Код:
function CF_Price_oldFormula return Char is
rn pls_integer;
begin
rn := 1;
for c in ( select price
from supermag.smpricehistory
where article = :ARTICLE
and pricetype = :P_PRICE_TYPE
and storeloc = :P_LOC
order by eventtime desc, recid desc
)
loop
if rn = 2 then return c.price;
end if;
rn := rn + 1;
end loop;
return '';
end;
А вот по варианту 1 - должно работать все.