Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mensimulasikan Fungsi Lag dalam MySQL?

Bagaimana untuk Mensimulasikan Fungsi Lag dalam MySQL?

Barbara Streisand
Lepaskan: 2025-01-18 01:01:08
asal
771 orang telah melayarinya

How to Simulate the Lag Function in MySQL?

Simulasikan fungsi LAG dalam MySQL

MySQL tidak menyokong fungsi LAG() secara asli, yang biasanya digunakan untuk mengira perbezaan antara nilai baris semasa dan nilai baris sebelumnya. Walau bagaimanapun, kita boleh menyelesaikan masalah ini dengan kemas menggunakan pembolehubah MySQL.

Mari kita lihat contoh set data yang disediakan:

<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>
Salin selepas log masuk

Untuk mensimulasikan fungsi LAG(), kita boleh menggunakan pertanyaan berikut:

<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>
Salin selepas log masuk

Pertanyaan ini menggunakan pembolehubah MySQL @quot untuk menyimpan nilai petikan baris sebelumnya. Dengan memperuntukkan nilai petikan baris semasa kepada curr_quote, kita boleh mengira perbezaan antaranya.

Keputusan:

<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>
Salin selepas log masuk

Untuk mendapatkan format output yang diingini:

<code>GOOGLE | 20
SAP    | 40</code>
Salin selepas log masuk

Gunakan pertanyaan berikut:

<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>
Salin selepas log masuk

Keputusan:

<code>| 时间                | 公司    | change |
+---------------------+---------+-------+
| 2012-07-02 21:28:05 | GOOGLE  | 20     |
| 2012-07-02 21:29:05 | SAP     | -40    |</code>
Salin selepas log masuk

Sila ambil perhatian bahawa nilai perubahan SAP dalam hasil pertanyaan kedua ialah -40 dan bukannya 40. Ini tidak konsisten dengan hasil artikel asal mungkin terdapat masalah dengan pertanyaan kedua artikel asal. Kod di atas membetulkan ralat ini dan mensimulasikan kelakuan fungsi LAG dengan lebih tepat.

Atas ialah kandungan terperinci Bagaimana untuk Mensimulasikan Fungsi Lag dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan