sql >> データベース >  >> RDS >> PostgreSQL

テーブル内の同じ列の2つのレコードを減算します

    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;
    


    1. Ubuntu16.04でのPostgreSQLデータベースの作成と削除

    2. ページネーションでのSQLエラー

    3. 同じテーブル内からのMYSQLアップデート

    4. Laravel Schema Builder:binary(16)列の作成