Potřebujete nějaký způsob, jak určit pořadí řádků v score
. V tabulce v relační databázi neexistuje žádný "přirozený řád". Předpokládám tedy, že máte id
(nebo časové razítko nebo tak něco), podle kterého si můžete své záznamy objednat. Nebo je i
zaručeně větší v každé nové řadě? Pak už stačí objednat podle i
.
Samotný dotaz je jednoduchý – jakmile zjistíte o okně funkce :
SELECT i - lag(i, 1, 0) OVER (ORDER BY id) AS result
FROM score
ORDER BY id;
Včetně vylepšení od @Clodoaldo (viz komentář).
lag(i, 1, 0) OVER (ORDER BY id)
je ekvivalentní, ale elegantnější než:
COALESCE(lag(i) OVER (ORDER BY id), 0)
Účelem je pokrýt speciální případ prvního řádku, který nemá žádný předchozí řádek.
Demo na sqlfiddle.
sum(result)
je triviální, protože se musí rovnat poslednímu i
podle vašeho popisu:
SELECT i
FROM score
ORDER BY id DESC
LIMIT 1;