ホームページ > データベース > mysql チュートリアル > MySQL で Lag 関数をシミュレートするには?

MySQL で Lag 関数をシミュレートするには?

Barbara Streisand
リリース: 2025-01-18 01:01:08
オリジナル
772 人が閲覧しました

How to Simulate the Lag Function in MySQL?

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

MySQL は、通常、現在の行の値と前の行の値の差を計算するために使用される LAG() 関数をネイティブにサポートしていません。ただし、MySQL 変数を使用すると、この問題をうまく解決できます。

提供されているサンプル データセットを見てみましょう:

<code>| 时间                | 公司    | 报价 |
+---------------------+---------+-------+
| 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>
ログイン後にコピー

このクエリは、MySQL 変数 @quot を使用して、前の行の引用符で囲まれた値を保存します。現在の行の引用符で囲まれた値を curr_quote に代入することで、それらの差を計算できます。

結果:

<code>| 时间                | 公司    | lag_quote | curr_quote |
+---------------------+---------+----------+-----------+
| 0000-00-00 00:00:00 | GOOGLE  | -1        | 40         |
| 2012-07-02 21:28:05 | GOOGLE  | 40        | 60         |
| 2012-07-02 21:28:51 | SAP     | -1        | 60         |
| 2012-07-02 21:29:05 | SAP     | 60        | 20         |</code>
ログイン後にコピー

目的の出力形式を取得するには:

<code>GOOGLE | 20
SAP    | 40</code>
ログイン後にコピー

次のクエリを使用します:

<code class="language-sql">SET @quot = 0, @latest = 0, @comp = '';
SELECT
  B.*
FROM
  (
    SELECT
      A.time,
      A.change,
      IF(@comp = A.company, 1, 0) 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>
ログイン後にコピー

結果:

<code>| 时间                | 公司    | change |
+---------------------+---------+-------+
| 2012-07-02 21:28:05 | GOOGLE  | 20     |
| 2012-07-02 21:29:05 | SAP     | -40    |</code>
ログイン後にコピー

2 番目のクエリの結果の SAP の変更値は 40 ではなく -40 であることに注意してください。これは元の記事の結果と一致しません。元の記事の 2 番目のクエリに問題がある可能性があります。 上記のコードはこのエラーを修正し、LAG 関数の動作をより正確にシミュレートします。

以上がMySQL で Lag 関数をシミュレートするには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート