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。 EnergyLog
表。 @lastSN
進行比較。如果匹配,則計算當前值與前一個@lastValue
之間的消耗(差值)。 @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中文網其他相關文章!