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>
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>
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>
Untuk mendapatkan format output yang diingini:
<code>GOOGLE | 20 SAP | 40</code>
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>
Keputusan:
<code>| 时间 | 公司 | change | +---------------------+---------+-------+ | 2012-07-02 21:28:05 | GOOGLE | 20 | | 2012-07-02 21:29:05 | SAP | -40 |</code>
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!