当前位置: 首页 > 面试题库 >

如何滞后MySQL中的列?

燕航
2023-03-14
问题内容

请考虑下表:

SELECT id, value FROM table ORDER BY id ASC;
+-----+---------+
| id  | value   |
+-----+---------+
| 12  | 158     |
| 15  | 346     |
| 27  | 334     |
| 84  | 378     |
| 85  | 546     |
+-----+---------+

id列会自动增加,但包含空白。该value列为数字。

我想value通过设置value相对于上述value两行的方式来查看随时间的增长。那是针对行,id=85我要相对于行(334)设置valueid=85(546
)的。因此,要为行计算的值是546/334 = 1.63473。value``id=27``id=85

这是我想要实现的结果:

SELECT id, value, ...;
+-----+---------+---------------------+
| id  | value   | value/lag(value, 2) | (the syntax value/lag(value, 2) is made up)
+-----+---------+---------------------+
| 12  | 158     | NULL                |
| 15  | 346     | NULL                |
| 27  | 334     | 2.11392             | (334/158=2.11392)
| 84  | 378     | 1.09248             | (378/346=1.09248)
| 85  | 546     | 1.63473             | (546/334=1.63473)
+-----+---------+---------------------+

如何在MySQL中执行此类滞后?

请注意,该id列包含空格,因此仅在与同一表上的连接t1.id = t2.id - 2将不起作用。


问题答案:

这是一个返回MySQL所需内容的解决方案

SET @a :=0;
SET @b :=2;
SELECT r.id, r.value, r.value/r2.value AS 'lag'
FROM
(SELECT if(@a, @a:=@a+1, @a:=1) as rownum, id, value FROM results) AS r
LEFT JOIN
(SELECT if(@b, @b:=@b+1, @b:=1) as rownum, id, value FROM results) AS r2
ON r.rownum = r2.rownum

MySQL 5.1不喜欢针对子查询的自联接,因此您必须对行进行两次计数,因此可能不够整洁或可扩展,但是它确实使指定滞后变得简单。

对于使用Oracle的读者来说,这要容易得多

SELECT id, value, value/lag(value, 2) over (order by id) as lag from results;


 类似资料:
  • 问题内容: 伙计们,我想在mysql中使用解析函数滞后。在Oracle中受支持,但在Mysql中无法做到。那么有人可以帮助我如何在Mysql中执行滞后运算吗?例如 我想使用滞后函数,以便我的输出如下 Mysql支持滞后功能吗??? 问题答案: 您可以使用用户变量来模拟它: 看到它在工作sqlfiddle直播 在这里,您可以初始化变量。这与在编写查询之前编写内容相同。 那么这些语句在select子句

  • 我对编程和电话差距非常陌生。在计算机上测试的GIF的动画似乎工作正常,但是当导出到api并安装到我的手机中时。动画是滞后和故障。你知道为什么会发生这种情况吗?谢谢。

  • 问题内容: 我正在此SQL函数中编写SQL Server 2012 但在第一行 ** LAG(Data)我有一个错误。所以我不知道如何在SQL Server 2008中使用LAG()函数。 有人可以帮我吗? 问题答案: 遗憾的是,SQL Server 2012之前的版本不可用。您必须使用自连接来代替:

  • 问题内容: 我在libgdx中的音乐循环时遇到麻烦。我知道以前有一个Simmilair主题,但这完全没有帮助。关键是,当您进入游戏的主菜单(链接)时,雨声就回响了。不幸的是,每场比赛之间只有片刻的沉默,我不知道为什么- 您可以下载游戏,看看我的意思。我已经在使用.ogg格式,因此在这里找到的其他主题的解决方案并没有真正的帮助。 如果我在Audacity中循环播放此声音,则效果很好。 这是我的代码(

  • 问题内容: 我在此DataBricks帖子中看到,SparkSql支持窗口函数,特别是我正在尝试使用lag()窗口函数。 我有几行信用卡交易,并且已经对它们进行了排序,现在我要遍历各行,并为每一行显示交易金额,以及当前行金额与上一行金额的差额。 在DataBricks帖子之后,我提出了这个查询,但是它给我抛出了一个异常,我无法理解为什么。 这是在PySpark中。tx是我在注册为临时表时创建的数据

  • 我有一个真正的env与3个kafka机器集群,它正在接收大量数据。对于每个主题,有 25 个分区,复制因子设置为 2。 我的应用程序(基于kafka流的应用程序)从这个kafka集群获取数据的应用程序停机了一个多月。现在,每个分区都有大量滞后;高达90000000。 我知道以下参数: 我有两个消费者节点(使用kafka集群数据的相同组id)。 然而,它并没有赶上滞后,而是保持不变。有人能建议如何改