計算 MySQL 中的消耗:減去前一行值,以 SN 分組
本指南示範如何透過比較 MySQL 表中每個 SN
群組內的連續值來計算消耗。 數據包括 SN
(序號)和 Value
列,代表一段時間內的測量值。 目標是透過從當前值減去前一個值來計算每個 SN
的消耗。
這是一個利用使用者定義變數來實現此目的的 MySQL 查詢:
<code class="language-sql">SELECT EL.SN, EL.Date, EL.Value, IF(@lastSN = EL.SN, EL.Value - @lastValue, 0.00) AS Consumption, @lastSN := EL.SN, @lastValue := EL.Value FROM EnergyLog EL, (SELECT @lastSN := NULL, @lastValue := NULL) AS SQLVars ORDER BY EL.SN, EL.Date;</code>
查詢說明:
變數初始化:子查詢(SELECT @lastSN := NULL, @lastValue := NULL) AS SQLVars
將使用者定義的變數@lastSN
(追蹤前一個SN
)和@lastValue
(追蹤前一個Value
)初始化為NULL
。 使用 NULL
而不是 0 可以正確處理每個 SN
組的第一行。
逐行處理: 主查詢迭代 EnergyLog
表(別名 EL
),依 SN
和 Date
排序。
消耗計算: IF
語句檢查目前的 SN
(EL.SN
) 是否與先前處理的 SN
(@lastSN
) 相符。
EL.Value - @lastValue
。 SN
群組),則會將消耗設為 0.00。 變數更新: @lastSN := EL.SN
和 @lastValue := EL.Value
更新下一行比較的變數。
輸出: 查詢傳回每行的 SN
、Date
、Value
和計算的 Consumption
。
此方法使用單一查詢有效地計算每個 SN
群組內的消耗,從而消除了對更複雜的子查詢或聯結的需要。 使用使用者定義的變數使計算簡潔且有效率。
以上是如何透過減去 MySQL 中按 SN 分組的前一行值來計算消耗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!