Я бы порекомендовал вам переписать ваш запрос примерно так:
SELECT sa.updat activity_made
, CASE WHEN TRUNC(sa.updat) = TRUNC(SYSDATE) THEN TO_CHAR(sa.updat, 'hh12:mi PM')
WHEN sa.updat > TRUNC(SYSDATE,'yy') THEN TO_CHAR(sa.updat, 'Mon dd')
ELSE TO_CHAR(sa.updat, 'mm/dd/yyyy')
END actmode
FROM sfa_activity sa
WHERE (sa.companyid, sa.opptyid) IN (SELECT opp.companyid, opp.opptyid
FROM sfa_opportunities opp
WHERE companyid = 1192)
ORDER BY CASE WHEN sa.TYPE = 'NOTE' THEN 0 ELSE 1 END, sa.updat DESC
FETCH first ROW ONLY
Ваша версия имеет некоторые недостатки:
- ненужные преобразования типов
- много выборок на одной и той же таблице, которые не нужны
- возможны также проблемы с производительностью
Обработка, когда никакие действия не выполняются, должна производиться снаружи, а не во внутреннем выборе. (Облегчает обслуживание.)