我的问题与此SO post类似,但区别在于我没有顺序ID列。
我有一个表格如下
ID | length
0 | 5
0 | 7
0 | 10
1 | 3
1 | 8
1 | 12
2 | 1
2 | 2
2 | 4
2 | 5
我希望得到按ID分组的长度列中连续行之间的差异。所以应该给出
ID | length | difference
0 | 5 | NULL
0 | 7 | 2
0 | 10 | 3
1 | 3 | NULL
1 | 8 | 5
1 | 12 | 4
2 | 1 | NULL
2 | 2 | 1
2 | 4 | 2
2 | 5 | 1
我不知道该怎么做。我尝试给每个ID一个单独的ID,这是顺序的,但事实证明是复杂的,我无法让它工作。有人可以建议一个更好的方法吗?
答案 0 :(得分:2)
假设(id,length)是UNIQUE ......
SELECT x.*
, x.length - MAX(y.length) diff
FROM my_table x
LEFT
JOIN my_table y
ON y.id = x.id
AND y.length < x.length
GROUP
BY x.id
, x.length;
答案 1 :(得分:1)
select a.id, a.length, b.length, b.length - a.length as difference
from mytable a, mytable b
where a.id=b.id
and b.length = (select min(length) from mytable where id=a.id and length > a.length)