Hai bisogno di un modo per determinare la sequenza di righe in score
. Non esiste un "ordine naturale" in una tabella in un database relazionale. Quindi presumo che tu abbia un id
(o un timestamp o qualcosa del genere) per ordinare i tuoi record. Oppure è i
garantito per essere maggiore in ogni nuova riga? Quindi puoi semplicemente ordinare tramite i
.
La query in sé è semplice:una volta scoperto window funzioni :
SELECT i - lag(i, 1, 0) OVER (ORDER BY id) AS result
FROM score
ORDER BY id;
Compreso un miglioramento di @Clodoaldo (vedi commento).
lag(i, 1, 0) OVER (ORDER BY id)
è equivalente, ma più elegante di:
COALESCE(lag(i) OVER (ORDER BY id), 0)
Lo scopo è quello di coprire il caso speciale della prima riga che non ha una riga precedente.
Demo su sqlfiddle.
sum(result)
è banale perché è destinato ad essere uguale all'ultimo i
secondo la tua descrizione:
SELECT i
FROM score
ORDER BY id DESC
LIMIT 1;