Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mensimulasikan Fungsi Lag dalam MySQL untuk Mengira Perbezaan Antara Nilai Berturut-turut?

Bagaimanakah Saya Boleh Mensimulasikan Fungsi Lag dalam MySQL untuk Mengira Perbezaan Antara Nilai Berturut-turut?

Linda Hamilton
Lepaskan: 2025-01-18 00:56:08
asal
316 orang telah melayarinya

How Can I Simulate a Lag Function in MySQL to Calculate Differences Between Successive Values?

Simulasi fungsi lag dalam MySQL

Mengira perbezaan antara nilai berturut-turut dalam siri masa (dipanggil lag) boleh dilaksanakan dalam MySQL menggunakan penyelesaian yang bijak. Untuk memahami teknik ini, mari kita pertimbangkan jadual yang disediakan:

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

Untuk mensimulasikan fungsi ketinggalan dan mengira perbezaan dalam petikan, kami menggunakan strategi berikut:

  1. Memulakan dua pembolehubah, @quot mempunyai nilai awal -1 dan @curr_quote digunakan untuk menjejak nilai sebut harga semasa.
  2. Laksanakan pertanyaan berikut untuk lelaran melalui jadual, mengemas kini pembolehubah dengan setiap baris:
<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
    Lajur
  1. lag_quote kini memegang nilai bida baris sebelumnya dan curr_quote memegang nilai bida baris semasa.

Untuk mendapatkan format output yang diingini (perbezaan syarikat dan sebut harga):

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

Kami menggunakan pertanyaan bersarang:

<code class="language-sql">SET @quot=0,@latest=0,company='';
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

Kaedah ini mensimulasikan fungsi ketinggalan dengan berkesan dengan mengekalkan pembolehubah sesi yang menjejaki nilai baris sebelumnya. Walaupun ia kelihatan intensif secara pengiraan, pertanyaan bersarang tidak berkaitan antara satu sama lain, jadi ia masih agak cekap.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mensimulasikan Fungsi Lag dalam MySQL untuk Mengira Perbezaan Antara Nilai Berturut-turut?. 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