表1包含一列累积值(所有正整数):
id ValuesCum 1 5 2 8 3 20
我想写一个语句,返回一个额外的列,每行的值递增。输出应该是这样的:
id ValuesCum ValuesInc 1 5 (5) 2 8 3 3 20 12
有人有解决办法吗?
z0qdvdin1#
如果您运行的是mysql 8.0,那么可以使用window函数 lag() 为此:
lag()
select t.*, ValuesCum - lag(ValuesCum, 1, 0) over(order by id) ValuesInc from mytable t
在早期版本中,另一种方法是关联子查询:
select t.*, ValuesCum - ( select coalesce(max(t1.ValuesCum), 0) from mytable t1 where t1.id < t.id ) ValuesInc from mytable t
sycxhyv72#
可以使用相关子查询来获取 ValuesCum 以前的 id :
ValuesCum
id
select t.*, t.ValuesCum - coalesce((select ValuesCum from tablename where id < t.id order by id desc limit 1), 0) ValuesInc from tablename t
请看演示。结果:
| id | ValuesCum | ValuesInc | | --- | --------- | --------- | | 1 | 5 | 5 | | 2 | 8 | 3 | | 3 | 20 | 12 |
2条答案
按热度按时间z0qdvdin1#
如果您运行的是mysql 8.0,那么可以使用window函数
lag()
为此:在早期版本中,另一种方法是关联子查询:
sycxhyv72#
可以使用相关子查询来获取
ValuesCum
以前的id
:请看演示。
结果: