MySQL 中模擬滯後函數
在時間序列中計算連續值之間的差值(稱為滯後)可以在 MySQL 中使用巧妙的變通方法實現。為了理解這種技術,讓我們考慮提供的表格:
<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>
為了模擬滯後函數並計算報價的差異,我們採用以下策略:
@quot
初始值為 -1,@curr_quote
用於追蹤當前報價值。 <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
列現在保存前一行的報價值,curr_quote
保存目前行的報價值。 為了獲得所需的輸出格式(公司和報價差異):
<code>GOOGLE | 20 SAP | 40</code>
我們使用巢狀查詢:
<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>
此方法透過維護一個會話變數來追蹤前一行的值,從而有效地模擬滯後函數。雖然它看起來計算密集,但嵌套查詢之間沒有關聯,因此仍然相對有效率。
以上是如何在 MySQL 中模擬滯後函數來計算連續值之間的差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!