ホームページ >データベース >mysql チュートリアル >MySQL で前の行の値を SN ごとにグループ化して減算して消費量を計算する方法

MySQL で前の行の値を SN ごとにグループ化して減算して消費量を計算する方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-10 11:41:42118ブラウズ

How to Calculate Consumption by Subtracting Previous Row Values in MySQL, Grouped by SN?

MySQL での消費量の計算: SN でグループ化された前の行の値の減算

このガイドでは、MySQL テーブル内の各 SN グループ内の連続する値を比較することによって消費量を計算する方法を説明します。 データには、時間の経過に伴う測定値を表す SN (シリアル番号) 列と Value 列が含まれています。 目標は、現在の値から前の値を減算して、各 SN の消費量を計算することです。

これを実現するためにユーザー定義変数を利用する MySQL クエリを次に示します。

<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 := NULL, @lastValue := NULL) AS SQLVars
ORDER BY
  EL.SN,
  EL.Date;</code>

クエリの説明:

  1. 変数の初期化: サブクエリ (SELECT @lastSN := NULL, @lastValue := NULL) AS SQLVars は、ユーザー定義変数 @lastSN (前の SN を追跡するため) と @lastValue (前の Value を追跡するため) を 。 0 の代わりに NULL を使用すると、各 NULL グループの最初の行が正しく処理されます。SN

  2. 行ごとの処理: メインのクエリは、 テーブル (EnergyLog というエイリアス) を ELSN の順序で繰り返し処理します。Date

  3. 消費量の計算: ステートメントは、現在の IF (SN) が以前に処理された EL.SN (SN) と一致するかどうかをチェックします。@lastSN

      それらが一致する場合、消費量は
    • として計算されます。EL.Value - @lastValue
    • 一致しない場合 (新しい
    • グループを意味します)、消費量は 0.00 に設定されます。SN
  4. 変数の更新: および @lastSN := EL.SN は、次の行の比較の変数を更新します。@lastValue := EL.Value

  5. 出力: クエリは、各行の SNDate、および計算された Value を返します。Consumption

このアプローチでは、単一のクエリを使用して各

グループ内の消費量を効率的に計算し、より複雑なサブクエリや結合の必要性を排除します。 ユーザー定義変数を使用すると、計算が簡潔になり、パフォーマンスが向上します。SN

以上がMySQL で前の行の値を SN ごとにグループ化して減算して消費量を計算する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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