MySQL:以序號 (SN) 計算連續行之間的能耗差異
本文檔概述了一種計算 MySQL 資料庫中連續行之間能耗差異的方法,按序號 (SN) 分組。
問題:
給定一個包含能源消耗資料的表,目標是計算每個 SN 的消耗差異,表示該特定 SN 當前值與先前值之間的變化。
範例資料:
下表 (EnergyLog
) 說明了初始資料結構:
SN | Date | Value |
---|---|---|
2380 | 2012-10-30 00:15:51 | 21.01 |
2380 | 2012-10-31 00:31:03 | 22.04 |
2380 | 2012-11-01 00:16:02 | 22.65 |
2380 | 2012-11-02 00:15:32 | 23.11 |
20100 | 2012-10-30 00:15:38 | 35.21 |
20100 | 2012-10-31 00:15:48 | 37.07 |
20100 | 2012-11-01 00:15:49 | 38.17 |
20100 | 2012-11-02 00:15:19 | 38.97 |
20103 | 2012-10-30 10:27:34 | 57.98 |
20103 | 2012-10-31 12:24:42 | 60.83 |
期望輸出:
查詢應產生一個新增了 Consumption
欄位的表格:
SN | Date | Value | Consumption |
---|---|---|---|
2380 | 2012-10-30 00:15:51 | 21.01 | 0.00 |
2380 | 2012-10-31 00:31:03 | 22.04 | 1.03 |
2380 | 2012-11-01 00:16:02 | 22.65 | 0.61 |
2380 | 2012-11-02 00:15:32 | 23.11 | 0.46 |
20100 | 2012-10-30 00:15:38 | 35.21 | 0.00 |
20100 | 2012-10-31 00:15:48 | 37.07 | 1.86 |
20100 | 2012-11-01 00:15:49 | 38.17 | 1.10 |
20100 | 2012-11-02 00:15:19 | 38.97 | 0.80 |
20103 | 2012-10-30 10:27:34 | 57.98 | 0.00 |
20103 | 2012-10-31 12:24:42 | 60.83 | 2.85 |
SQL 解:
以下 SQL 查詢利用使用者定義的變數來實現所需的結果:
<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 := 0, @lastValue := 0) AS SQLVars ORDER BY EL.SN, EL.Date;</code>
說明:
@lastSN
和 @lastValue
:這些是初始化為 0 的使用者定義變數。 @lastSN
追蹤最後處理的 SN,@lastValue
儲存最後處理的值。 IF(@lastSN = EL.SN, EL.Value - @lastValue, 0.00)
:此條件語句檢查目前 SN 是否與先前的 SN 相同。如果為true,則計算消耗差額;否則,它將消耗設為 0.00(對於每個 SN 的第一個條目)。 @lastSN := EL.SN, @lastValue := EL.Value
:這些賦值在處理每一行後更新使用者定義的變數。 ORDER BY EL.SN, EL.Date
:此子句確保以正確的順序處理行(先按 SN,然後按日期)以進行準確的差異計算。 此方法利用MySQL的變數處理能力,有效計算每個SN的能耗差異。 ORDER BY
的使用對於結果的正確性至關重要。
以上是如何透過SN計算MySQL中連續行之間的能耗差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!