Você precisa de alguma maneira de determinar a sequência de linhas em
score
. Não há "ordem natural" em uma tabela em um banco de dados relacional. Então, suponho que você tenha um id
(ou um carimbo de data/hora ou algo assim) para ordenar seus registros. Ou é i
garantido ser maior em cada nova linha? Então você pode simplesmente encomendar por i
. A consulta em si é simples - assim que você descobrir sobre a window funções :
SELECT i - lag(i, 1, 0) OVER (ORDER BY id) AS result
FROM score
ORDER BY id;
Incluindo uma melhoria do @Clodoaldo (ver comentário).
lag(i, 1, 0) OVER (ORDER BY id)
é equivalente, mas mais elegante do que:
COALESCE(lag(i) OVER (ORDER BY id), 0)
O objetivo é cobrir o caso especial da primeira linha que não tem linha anterior.
Demonstração no sqlfiddle.
sum(result)
é trivial porque é obrigado a ser igual ao último i
de acordo com sua descrição:SELECT i
FROM score
ORDER BY id DESC
LIMIT 1;