Du har brug for en måde at bestemme rækkefølgen af rækker i score
. Der er ingen "naturlig orden" i en tabel i en relationsdatabase. Så jeg antager, at du har et id
(eller et tidsstempel eller noget) for at bestille dine poster efter. Eller er i
garanteret at være større i hver ny række? Så kan du bare bestille efter i
.
Selve forespørgslen er enkel - når du først finder ud af vinduet funktioner :
SELECT i - lag(i, 1, 0) OVER (ORDER BY id) AS result
FROM score
ORDER BY id;
Herunder en forbedring af @Clodoaldo (se kommentar).
lag(i, 1, 0) OVER (ORDER BY id)
svarer til, men mere elegant end:
COALESCE(lag(i) OVER (ORDER BY id), 0)
Formålet er at dække det særlige tilfælde af den første række, der ikke har nogen forudgående række.
Demo på sqlfiddle.
sum(result)
er trivielt, fordi det er bundet til at være lig med den sidste i
ifølge din beskrivelse:
SELECT i
FROM score
ORDER BY id DESC
LIMIT 1;