首頁 >資料庫 >mysql教程 >如何透過減去 MySQL 中按 SN 分組的前一行值來計算消耗?

如何透過減去 MySQL 中按 SN 分組的前一行值來計算消耗?

Patricia Arquette
Patricia Arquette原創
2025-01-10 11:41:42120瀏覽

How to Calculate Consumption by Subtracting Previous Row Values in MySQL, Grouped by SN?

計算 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>

查詢說明:

  1. 變數初始化:子查詢(SELECT @lastSN := NULL, @lastValue := NULL) AS SQLVars將使用者定義的變數@lastSN(追蹤前一個SN)和@lastValue(追蹤前一個Value)初始化為NULL 。 使用 NULL 而不是 0 可以正確處理每個 SN 組的第一行。

  2. 逐行處理: 主查詢迭代 EnergyLog 表(別名 EL),依 SNDate 排序。

  3. 消耗計算: IF 語句檢查目前的 SN (EL.SN) 是否與先前處理的 SN (@lastSN) 相符。

    • 如果它們匹配,則將消耗計算為EL.Value - @lastValue
    • 如果它們不匹配(意味著一個新的 SN 群組),則會將消耗設為 0.00。
  4. 變數更新: @lastSN := EL.SN@lastValue := EL.Value 更新下一行比較的變數。

  5. 輸出: 查詢傳回每行的 SNDateValue 和計算的 Consumption

此方法使用單一查詢有效地計算每個 SN 群組內的消耗,從而消除了對更複雜的子查詢或聯結的需要。 使用使用者定義的變數使計算簡潔且有效率。

以上是如何透過減去 MySQL 中按 SN 分組的前一行值來計算消耗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn