Du behöver något sätt att bestämma sekvensen av rader i score
. Det finns ingen "naturlig ordning" i en tabell i en relationsdatabas. Så jag antar att du har ett id
(eller en tidsstämpel eller något) för att beställa dina skivor efter. Eller är i
garanterat vara större i varje ny rad? Då kan du bara beställa med i
.
Frågan i sig är enkel - när du får reda på fönster funktioner :
SELECT i - lag(i, 1, 0) OVER (ORDER BY id) AS result
FROM score
ORDER BY id;
Inklusive en förbättring av @Clodoaldo (se kommentar).
lag(i, 1, 0) OVER (ORDER BY id)
motsvarar, men mer elegant än:
COALESCE(lag(i) OVER (ORDER BY id), 0)
Syftet är att täcka specialfallet för den första raden som inte har någon föregående rad.
Demo på sqlfiddle.
sum(result)
är trivial eftersom den är bunden att vara lika med den sista i
enligt din beskrivning:
SELECT i
FROM score
ORDER BY id DESC
LIMIT 1;