一尘不染

在SQL中从另一行减去一行数据

mysql

我已经迷上了一些SQL,其中有几行数据,我想从上一行中减去一行,并使其一直向下重复。

所以这是表格:

CREATE TABLE foo(
  ID,
  长度
)


插入foo(id,length)VALUES(1,1090)
插入foo(id,length)VALUES(2,888)
插入foo(id,length)值(3,545)
插入foo(id,length)VALUES(4,434)
插入foo(id,length)VALUES(5,45)

我希望结果显示第三列,称为差异,即从下面的一列减去第一行,最后一行从零减去。

+ ------ + ------------------------ +
| id |长度| 差异|
+ ------ + ------------------------ +
| 1 | 1090 | 202 |
| 2 | 888 | 343 |
| 3 | 545 | 111 |
| 4 | 434 | 389 |
| 5 | 45 | 45 |

我已经尝试过自我连接,但是我不确定如何限制结果,而不是让结果不断循环。我不能确定id值对于给定的结果集是连续的,所以我不使用该值。我可以扩展架构以包括某种顺序值。

这是我尝试过的:

SELECT id,f.length,f2.length,(f.length-f2.length)AS差异
从foo f,foo f2

谢谢您的协助。


阅读 1163

收藏
2020-05-17

共1个答案

一尘不染

这可能会对您有所帮助。

select a.id, a.length, 
coalesce(a.length - 
    (select b.length from foo b where b.id = a.id + 1), a.length) as diff
from foo a
2020-05-17