Je hebt een manier nodig om de volgorde van rijen in score
te bepalen . Er is geen "natuurlijke volgorde" in een tabel in een relationele database. Dus ik neem aan dat je een id
. hebt (of een tijdstempel of zoiets) om uw records te bestellen. Of is i
gegarandeerd groter zijn in elke nieuwe rij? Dan kun je gewoon bestellen via i
.
De vraag zelf is eenvoudig - zodra u meer te weten komt over window functies :
SELECT i - lag(i, 1, 0) OVER (ORDER BY id) AS result
FROM score
ORDER BY id;
Inclusief een verbetering door @Clodoaldo (zie opmerking).
lag(i, 1, 0) OVER (ORDER BY id)
is gelijk aan, maar eleganter dan:
COALESCE(lag(i) OVER (ORDER BY id), 0)
Het doel is om het speciale geval van de eerste rij zonder voorgaande rij te behandelen.
Demo op sqlfiddle.
sum(result)
is triviaal omdat het gelijk is aan de laatste i
volgens uw beschrijving:
SELECT i
FROM score
ORDER BY id DESC
LIMIT 1;