使用 SQL 計算資料庫表中連續行之間的差異
假設您有一個資料庫表,其中包含一個非連續整數作為行標識符 (rowInt
) 和一個數值 (Value
)。 挑戰是使用 SQL 有效計算連續行 Value
之間的差異。
像這樣的簡單查詢將檢索資料:
<code class="language-sql">SELECT * FROM myTable ORDER BY rowInt;</code>
但是,我們需要計算並顯示差異。 所需的輸出格式為:
<code>rowInt Value Diff 2 23 22 --45-23 3 45 -35 --10-45 9 10 -45 --0-45 17 0 0 --0 (or NULL, depending on desired behavior)</code>
以下是如何使用帶有子查詢的自連接來實現此目的:
<code class="language-sql">SELECT c.rowInt, c.Value, ISNULL(n.Value, 0) - c.Value AS Diff FROM myTable AS c LEFT JOIN myTable AS n ON n.rowInt = (SELECT MIN(rowInt) FROM myTable WHERE rowInt > c.rowInt) ORDER BY c.rowInt;</code>
此查詢對錶 (LEFT JOIN
) 執行 myTable
操作,別名為 c
(目前)和 n
(下一個)。 ON
子句中的子查詢尋找大於目前行 rowInt
的最小值 rowInt
,從而有效地標識下一行。 ISNULL(n.Value, 0)
處理沒有下一行(最後一行)的情況,用 0 取代缺少的 n.Value
。 然後計算差異並將其別名為Diff
。最後的 ORDER BY
子句確保結果以正確的順序呈現。 或者,您可以使用 COALESCE
而不是 ISNULL
。 選擇取決於您特定的資料庫系統。
以上是如何使用SQL計算資料庫表中連續行之間的值差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!