基于MySQL中的前一行更新值
这个问题是基于我前面的问题。 而不是获取select语句, 我需要一个update语句来使用updatequery填充rum列 输入:基于MySQL中的前一行更新值,mysql,sql,window-functions,Mysql,Sql,Window Functions,这个问题是基于我前面的问题。 而不是获取select语句, 我需要一个update语句来使用updatequery填充rum列 输入: +---+--------+------+ |CID| number | rum | +---+--------+------+ | 1 | 1.0000 | NULL | | 3 | 2.0000 | NULL | | 5 | 2.0000 | NULL | | 6 | 4.0000 | NULL | +---+--------+------+ 输出:
+---+--------+------+
|CID| number | rum |
+---+--------+------+
| 1 | 1.0000 | NULL |
| 3 | 2.0000 | NULL |
| 5 | 2.0000 | NULL |
| 6 | 4.0000 | NULL |
+---+--------+------+
输出:
+---+--------+------+
|CID| number | rum |
+---+--------+------+
| 1 | 1.0000 | NULL |
| 3 | 2.0000 |100.0 |
| 5 | 2.0000 | 0.0 |
| 6 | 4.0000 |100.0 |
+---+--------+------+
公式:
rum = (currNumber - prevNumber) / prevNumber * 100
您可以在
更新中使用连接
和窗口函数。一种方法是:
update t join
(select t.*, lag(number) over (order by cid) as prev_number
from t
) tt
on tt.cid = t.cid
set rum = (number - prev_number) * 100 / prev_number;
您可以在更新中使用连接
和窗口函数。一种方法是:
update t join
(select t.*, lag(number) over (order by cid) as prev_number
from t
) tt
on tt.cid = t.cid
set rum = (number - prev_number) * 100 / prev_number;
-从MySQL 8.0Lag函数开始的对LAG函数的本机支持在MySQL中不起作用。我需要一个更新查询。除了Join和group Bys之外,我对sql没有任何掌握。您的MySql版本是什么?感谢lag函数起作用。我以前的mariadb没有起作用,但现在起作用了。-从MySQL 8.0Lag函数开始的对LAG函数的本机支持在MySQL中不起作用。我需要一个更新查询。除了Join和group Bys之外,我对sql没有太多的了解。你的MySql版本是什么?感谢lag函数,它在我以前的mariadb上不起作用,但现在起作用了。