SQL Server 2005 の連続する行間の差異の計算
このガイドでは、SQL Server 2005 テーブル内の連続する行値の差を計算する方法を説明します。 このソリューションでは、自己結合を利用してこの計算を効率的に実行します。
SQL クエリは次のとおりです:
<code class="language-sql">SELECT c.rowInt, c.Value, ISNULL(n.Value, 0) - c.Value AS Diff FROM sourceTable AS c LEFT JOIN sourceTable AS n ON n.rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > c.rowInt)</code>
このクエリは、sourceTable
(「current」の c
というエイリアス) とそれ自体 (「next」の n
というエイリアス) の左結合を実行します。 結合条件 n.rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > c.rowInt)
は、rowInt
列に基づいて次の行を検索し、正しい順序を保証します。 ISNULL(n.Value, 0)
は次の行がない場合を処理し、エラーを防ぎます。 差は n.Value - c.Value
として計算され、Diff
としてエイリアス化されます。
例:
次のサンプルを考えてみましょうsourceTable
:
rowInt | Value |
---|---|
2 | 23 |
3 | 45 |
9 | 0 |
17 | 10 |
クエリの出力は次のようになります:
rowInt | Value | Diff |
---|---|---|
2 | 23 | 22 |
3 | 45 | -45 |
9 | 0 | 10 |
17 | 10 | 0 |
Diff
列は、現在の行の Value
と次の行の Value
の差を示します。 後続の行がないため、最後の行の差は 0 であることに注意してください。
以上がSQL Server 2005 で連続する行の値の差を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。