Трябва ви някакъв начин да определите последователността от редове в score
. Няма "естествен ред" в таблица в релационна база данни. Така че предполагам, че имате id
(или клеймо за време или нещо подобно), по които да подредите записите си. Или е i
гарантирано ще бъде по-голям във всеки нов ред? След това можете просто да поръчате чрез i
.
Самата заявка е проста - след като разберете за window функциите :
SELECT i - lag(i, 1, 0) OVER (ORDER BY id) AS result
FROM score
ORDER BY id;
Включително подобрение от @Clodoaldo (вижте коментара).
lag(i, 1, 0) OVER (ORDER BY id)
е еквивалентен на, но по-елегантен от:
COALESCE(lag(i) OVER (ORDER BY id), 0)
Целта е да се покрие специалният случай на първия ред, който няма предходен ред.
Демо на sqlfiddle.
sum(result)
е тривиално, защото е обвързано да е равно на последното i
според вашето описание:
SELECT i
FROM score
ORDER BY id DESC
LIMIT 1;