ホームページ >データベース >mysql チュートリアル >MySQL で LAG 関数をシミュレートして、連続する行間の差異を計算するにはどうすればよいですか?

MySQL で LAG 関数をシミュレートして、連続する行間の差異を計算するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-18 01:07:09168ブラウズ

How Can I Simulate the LAG Function in MySQL to Calculate Differences Between Consecutive Rows?

MySQL で LAG 関数をシミュレートする

MySQL には直接的な LAG 関数はありませんが、ユーザー定義変数を巧みに使用してその関数をシミュレートし、連続する行間の差分を計算できます。

次のテーブルがあるとします:

<code>| time                | company | quote |
+---------------------+---------+-------+
| 0000-00-00 00:00:00 | GOOGLE  |    40 |
| 2012-07-02 21:28:05 | GOOGLE  |    60 |
| 2012-07-02 21:28:51 | SAP     |    60 |
| 2012-07-02 21:29:05 | SAP     |    20 |</code>

次のクエリを使用して LAG 関数をシミュレートできます:

<code class="language-sql">SET @quot=-1;
SELECT time, company, @quot AS lag_quote, @quot:=quote AS curr_quote
FROM stocks
ORDER BY company, time;</code>

このクエリ:

  • ユーザー定義変数 @quot を -1 に初期化します。
  • 現在の行 quote と前の行の quote の差を計算します (ただし、ここでは差は直接計算されませんが、データの前の行を取得する方法が示されています)。
  • 次の反復で使用するために、現在の行の quote 値を @quot に保存します。

結果のフォーマット

希望の形式を取得するには:

<code>GOOGLE | 20
SAP    | 40</code>

ネストされたサブクエリを使用できます:

<code class="language-sql">SET @quot=0,@latest=0,company='';
SELECT B.* 
FROM (
    SELECT A.time, A.change, IF(@comp=A.company, 0, 1) AS LATEST, @comp:=A.company AS company
    FROM (
        SELECT time, company, quote - @quot AS change, @quot:=quote AS curr_quote
        FROM stocks
        ORDER BY company, time
    ) A
    ORDER BY company, time DESC
) B
WHERE B.LATEST = 1;</code>

このクエリ:

  • quoteの差を計算し、change列に格納します。
  • IF ステートメントと変数 @comp を使用して、各企業グループの最初の行 (LATEST=1) を識別します。
  • 各企業グループの最初の行のみが含まれるように結果をフィルターします。

結論

上記の方法は、MySQL の LAG 関数を効果的にシミュレートし、時系列データの分析に実用的かつ効率的な方法を提供します。 2 つのメソッドは若干異なる方法で実装されていることに注意してください。最初のメソッドはデータの前の行にアクセスする方法をより直接的に示しており、2 番目のメソッドは差分の計算と出力結果のフォーマットに重点を置いています。 どの方法を選択するかは、特定のニーズによって異なります。

以上がMySQL で LAG 関数をシミュレートして、連続する行間の差異を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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