SQL テーブルの行値の違いを効率的に計算する
このガイドでは、非順次テーブル構造に焦点を当て、SQL テーブル内の連続する行値の差を計算する 2 つの方法を説明します。 最初の方法はすべての SQL バージョンに適していますが、2 番目の方法はウィンドウ関数を利用して SQL Server 2012 以降のパフォーマンスを向上させます。
方法 1: 自己結合 (すべての SQL バージョン)
このアプローチでは、 を使用して、行識別子 (この例では LEFT JOIN
) に基づいて各行を後続の行と比較します。rowInt
<code class="language-sql">SELECT current.rowInt, current.Value, ISNULL(next.Value, 0) - current.Value AS ValueDifference FROM sourceTable AS current LEFT JOIN sourceTable AS next ON next.rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > current.rowInt)</code>
関数は、行に後続 (最後の行) がない場合を処理し、ISNULL
値を避けるために差分 0 を割り当てます。NULL
方法 2: LEAD() ウィンドウ関数 (SQL Server 2012 以降)
新しい SQL Server バージョンで効率を高めるために、 ウィンドウ関数はより合理化されたソリューションを提供します。LEAD()
<code class="language-sql">SELECT RowInt, Value, LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value AS ValueDifference FROM sourceTable</code>
は次の行 (オフセット 1) から値を取得します。次の行が存在しない場合はデフォルトで 0 になります。 これにより差が直接計算されるため、自己結合の必要がなくなります。 通常、この方法の方が高速で読みやすいです。LEAD(Value, 1, 0)
以上がSQL テーブルの行値の違いを計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。