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中文网其他相关文章!