
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 サイトの他の関連記事を参照してください。