我已经收到了一些sql,我有几行数据,我想从上一行减去一行,并重复一遍.
所以这里是表:
CREATE TABLE foo ( id,length )
INSERT INTO foo (id,length) VALUES(1,1090) INSERT INTO foo (id,length) VALUES(2,888) INSERT INTO foo (id,length) VALUES(3,545) INSERT INTO foo (id,length) VALUES(4,434) INSERT INTO foo (id,length) VALUES(5,45)
我想要结果显示第三列,称为差异,它是从下一行减去一行,最后一行从零减去.
+------+------------------------+ | id |length | difference | +------+------------------------+ | 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 difference FROM 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