
使用 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中文網其他相關文章!