Sobre el ordenamiento, podrías ordenarla tal como te plazca:
Código SQL
[-]
select id, debe, haber, (debe - haber) as saldo,
(
select sum(debe-haber) from tabla t where t.id <= tabla.id
) as acumulado
from tabla
order by fecha;
El inconveniente que veo de enfrentar el problema con esta solución es el rendimiento. En bases de datos pequeñas, no habrá diferencia, pero en bases de datos grandes indudablemente no lo dejaría. Lamentablemente no sabemos el motor sobre el que se ejecutará, por lo que, ceñidos al estándar, no veo otra opción que esta.
Hasta luego.