MySQL: シリアル番号 (SN) による連続する行間のエネルギー消費量の差の計算
このドキュメントでは、シリアル番号 (SN) でグループ化された MySQL データベース内の連続する行間のエネルギー消費量の差を計算する方法の概要を説明します。
問題:
エネルギー消費データを含むテーブルが与えられた場合、目標は、特定の 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
の使用は、結果を正確にするために非常に重要です。
以上がMySQL の連続する行間のエネルギー消費量の差を SN によって計算する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。