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

列フィールドの2つの行の違いを取得するにはどうすればよいですか?

    SELECT
       [current].rowInt,
       [current].Value,
       ISNULL([next].Value, 0) - [current].Value
    FROM
       sourceTable       AS [current]
    LEFT JOIN
       sourceTable       AS [next]
          ON [next].rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > [current].rowInt)
    

    編集:

    それについて考えると、select(ala Quassnoiの答え)でサブクエリを使用する方が効率的かもしれません。さまざまなバージョンを試し、実行計画を調べて、使用しているデータセットのサイズでどれが最適に機能するかを確認します...


    編集2:

    多くの人がまだSQLServer2005を使用している可能性は低いですが、私はまだこの票を集めています。

    LEAD()などのウィンドウ関数にアクセスできる場合 、代わりにそれを使用してください...

    SELECT
      RowInt,
      Value,
      LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value
    FROM
      sourceTable
    


    1. T-SQLで文字列の先頭または末尾のスペースを削除する方法

    2. 日付範囲から日を生成する

    3. ビッグデータアプリケーション、SQLまたはNoSQLにとって何が良いですか?

    4. PostgreSQLで特定のテーブルのすべてのトリガーを一覧表示する3つの方法