score
の行の順序を決定する方法が必要です 。リレーショナルデータベースのテーブルには「自然な順序」はありません。だから私はあなたがid
を持っていると思います (またはタイムスタンプなど)レコードを並べ替えます。またはi
すべての新しい行で大きくなることが保証されていますか?次に、i
で注文できます 。
クエリ自体は単純です。
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;