計算 SQL 中連續行值的差異
資料庫查詢通常不僅涉及簡單的資料檢索。 確定連續行中的值之間的差異是一個常見的挑戰。本文詳細介紹了在 SQL 中計算這些差異的有效方法,並著重於行順序不嚴格順序的場景。
範例場景:
想像一個具有整數值的表,不一定會以行標識符順序排序:
<code>rowInt | Value --------+------ 2 | 23 3 | 45 17 | 10 9 | 0</code>
目標是計算每個 Value
和緊接著的行的 Value
之間的差異,結果是:
<code>rowInt | Value | Diff --------+--------+------ 2 | 23 | 22 3 | 45 | -35 9 | 0 | -45 17 | 10 | 10</code>
SQL Server 2005 方法(預視窗函數):
在引入視窗函數之前,SQL Server 2005依賴一種效率較低的結合子查詢和聚合函數的方法:
<code class="language-sql">SELECT [current].rowInt, [current].Value, ISNULL([next].Value, 0) - [current].Value AS Diff FROM sourceTable AS [current] LEFT JOIN ( SELECT MIN(rowInt) AS rowInt, Value FROM sourceTable WHERE rowInt > [current].rowInt GROUP BY Value ) AS [next] ON [next].rowInt = [current].rowInt</code>
說明:
ISNULL()
處理不存在後續行的情況,預設為 0。 rowInt
和 Value
。 Value
減去目前行的 Value
。 效能注意事項:
由於涉及多個表格掃描,這種舊技術對於大型資料集可能效率低下。 現代 SQL 提供了更最佳化的解決方案。
以上是如何在SQL中高效率計算行與行之間的值差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!