Restando una fila de datos de otra en SQL

Me he quedado perplejo con algunos SQL donde tengo varias filas de datos, y quiero restar una fila de la fila anterior y hacer que se repita completamente.

Así que aquí está la tabla:

CREATE TABLE foo (
  id,
  length
)
INSERT INTO foo (id,length) VALUES(1,1090)
INSERT INTO foo (id,length) VALUES(2,888)
INSERT INTO foo (id,length) VALUES(3,545)
INSERT INTO foo (id,length) VALUES(4,434)
INSERT INTO foo (id,length) VALUES(5,45)

Quiero que los resultados muestren una tercera columna llamada diferencia, que es una fila que resta de la siguiente y la fila final que resta de cero.

+------+------------------------+
| id   |length |  difference  |
+------+------------------------+
|    1 | 1090  |  202         |
|    2 |  888  |  343         |
|    3 |  545  |  111         |
|    4 |  434  |  389         |
|    5 |   45  |   45         |

He intentado una autounión, pero no estoy exactamente seguro de cómo limitar los resultados en lugar de hacer que se repita. No puedo depender de que el valor de id será secuencial para un conjunto de resultados determinado, por lo que no estoy usando ese valor. Podría extender el esquema para incluir algún tipo de valor secuencial.

Esto es lo que he intentado:

SELECT id, f.length, f2.length, (f.length - f2.length) AS difference
FROM foo f, foo f2

Gracias por la ayuda.

Respuestas a la pregunta(14)

Su respuesta a la pregunta