如何在sqlite表中获得自我差异

时间:2013-05-15 18:42:23

标签: sqlite logic

有没有人知道是否有办法在SQLite中获得此结果。

给出具有单列x的表,如下所示:

x |
--
1
4
5
2

我需要添加列dx,这只是差异x_i - x_ {i-1}(第一个除外),如下所示:

x | dx |
--  --
1 | 0
4 | 3
5 | 1
2 | -3

非常感谢!

更新:鉴于有id列:

id | x |
--  --
1  | 1
2  | 4
3  | 5
4  | 2

是否有可能获得:

id | x | dx |
--   --  --
1  | 1 | 0
2  | 4 | 3
3  | 5 | 1
4  | 2 | -3

1 个答案:

答案 0 :(得分:1)

SQL表没有与之关联的隐式顺序。您必须提供ORDER BY子句才能对结果执行订单。

您可以通过哪个列来定义减法的前导行? (提示:没有。)

根据修订后的问题添加id

sqlite> select id, x, (select t1.x - t2.x from t as t2 where id = t1.id - 1) from t as t1;
1|1|
2|4|3
3|5|1
4|2|-3

或者

sqlite> select id, x, coalesce((select t1.x - t2.x from t as t2 where id = t1.id - 1),0) from t as t1;
1|1|0
2|4|3
3|5|1
4|2|-3