Вы можете использовать условное агрегирование
SELECT s_num,SUM (CASE
WHEN eff_date >= TRUNC(sysdate)
AND eff_date < TRUNC(sysdate) + 1 THEN amount --today
WHEN eff_date >= TRUNC(sysdate) - 1
AND eff_date < TRUNC(sysdate) THEN - amount --yesterday
END)
FROM t
GROUP BY s_num;
Или LAG
функция
SELECT s_num,
diff
FROM (SELECT s_num,
eff_date,
amount - LAG(amount, 1, 0)
OVER (
partition BY s_num
ORDER BY eff_date ) AS diff
FROM t)
WHERE eff_date >= trunc(sysdate)
AND eff_date < trunc(sysdate) + 1 ;
Демо
Первый выводит разницу NULL
для дней, отличных от сегодняшнего дня, второй не возвращает строк для других дат.