我已经迷上了一些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
谢谢您的协助。
这可能会对您有所帮助。
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