在MySQL中模拟LAG函数
MySQL自身并不支持LAG函数来计算连续行之间的值差异。但是,我们可以通过以下方法模拟LAG函数的功能。
模拟LAG函数
以下SQL语句模拟了MySQL中的LAG函数:
<code class="language-sql">SET @quot=-1; select time,company,@quot lag_quote, @quot:=quote curr_quote from stocks order by company,time;</code>
这里,@quot
是一个用户自定义变量,用于存储前一行的报价。对于第一行,@quot
初始化为-1。curr_quote
保存当前行的报价。
自定义结果
虽然上述模拟提供了滞后值,但它并没有以问题中指定的格式呈现结果。为了达到该格式,可以使用以下嵌套查询:
<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 curr_quote from stocks order by company,time) A order by company,time desc) B where B.LATEST=1;</code>
这个嵌套查询计算报价差异,并识别每个公司的最后一行,从而生成所需格式的输出。
以上是如何在 MySQL 中模拟 LAG 函数?的详细内容。更多信息请关注PHP中文网其他相关文章!