Vous pouvez utiliser une agrégation conditionnelle et une somme cumulée :
select date,
sum(sum(case when outcome = 'New' then 1
when outcome 'Complete' then -1
else 0
end)
) over (order by date) as VolumeOutstanding
from t
group by date
order by date;
Cela suppose que chaque saleId
a au plus un enregistrement "nouveau" et un enregistrement "complet", ce qui est logique et vrai dans vos exemples de données.