ホームページ >データベース >mysql チュートリアル >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 に初期化します。 EnergyLog
テーブルを希望の順序 (SN および日付順) で繰り返します。 @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 中国語 Web サイトの他の関連記事を参照してください。