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>
Untuk mensimulasikan fungsi ketinggalan dan mengira perbezaan dalam petikan, kami menggunakan strategi berikut:
@quot
mempunyai nilai awal -1 dan @curr_quote
digunakan untuk menjejak nilai sebut harga semasa. <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>
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>
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>
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!