高效計算 SQL 表中的行值差異
本指南示範了兩種計算 SQL 表中連續行值之間差異的方法,並著重於非順序表結構。 第一種方法適用於所有 SQL 版本,而第二種方法則利用視窗函數來提高 SQL Server 2012 及更高版本的效能。
方法一:自加入(所有 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>
LEAD(Value, 1, 0)
檢索下一行(偏移量 1)的值,如果不存在下一行,則預設為 0。 這直接計算差異,消除了自連接的需要。 這種方法通常更快且更具可讀性。
以上是如何計算 SQL 表中的行值差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!