首頁 > 資料庫 > mysql教程 > MySQL中如何透過上一行減去來計算消耗值?

MySQL中如何透過上一行減去來計算消耗值?

Patricia Arquette
發布: 2025-01-10 12:01:43
原創
578 人瀏覽過

How to Calculate Consumption Values by Subtracting from the Previous Row in MySQL?

MySQL中按組別計算消耗值:基於前一行的差值

在MySQL中,根據分組因子計算連續值之間的差值是很常見的任務。假設需要根據前一個值計算每個序號(SN)的消耗值。

資料結構:

範例資料包含EnergyLog表,其模式如下:

<code>SN | 日期 | 值</code>
登入後複製

預期結果:

目標是擴充表,新增「消耗」列,該列表示每個SN相對於前一行的「值」的差值。

解:

MySQL變數提供了一種方便的方法來實現這一點。透過使用使用者定義的變數(@lastSN@lastValue),我們可以在迭代資料時追蹤前一個SN和值。

<code class="language-sql">-- 声明变量
SELECT
  EL.SN,
  EL.日期,
  EL.值,
  IF(@lastSN = EL.SN, EL.值 - @lastValue, 0.00) AS 消耗,
  @lastSN := EL.SN,
  @lastValue := EL.值
-- 来自表
FROM EnergyLog EL,
  (SELECT @lastSN := 0, @lastValue := 0) AS SQLVars
-- 按分组因子SN和日期排序
ORDER BY
  EL.SN,
  EL.日期;</code>
登入後複製

解釋:

  • FROM子句宣告變數(@lastSN@lastValue)並將它們初始化為0。
  • 查詢依所需順序(依SN和日期)迭代EnergyLog表。
  • 它將目前SN與@lastSN進行比較。如果匹配,則計算當前值與前一個@lastValue之間的消耗(差值)。
  • 如果SN不同,假定一個新群組並將消耗重設為0。
  • @lastSN@lastValue變數將更新到下一個迭代。

輸出:

SN 日期 消耗
2380 2012-10-30 21.01 0.00
2380 2012-10-31 22.04 1.03
2380 2012-11-01 22.65 0.61
2380 2012-11-02 23.11 0.46
20100 2012-10-30 35.21 0.00
20100 2012-10-31 37.07 1.86
20100 2012-11-01 38.17 1.10
20100 2012-11-02 38.97 0.80
20103 2012-10-30 57.98 0.00
20103 2012-10-31 60.83 2.85

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板