ホームページ >データベース >mysql チュートリアル >MySQL で前の行から減算して消費値を計算するにはどうすればよいですか?

MySQL で前の行から減算して消費値を計算するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-10 12:01:43581ブラウズ

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 に初期化します。
  • クエリは、EnergyLog テーブルを希望の順序 (SN および日付順) で繰り返します。
  • 現在の 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。