假设我们有下面的输入表
cat | value | position
------------------------
1 | A | 1
1 | B | 2
1 | C | 3
1 | D | 4
2 | C | 1
2 | B | 2
2 | A | 3
2 | D | 4
如您所见,这些值 A,B,C,D
改变 position
在每个 category
,我想通过添加列来跟踪此更改 change
在每个人前面 value
,输出应如下所示:
cat | value | position | change
---------------------------------
1 | A | 1 | NULL
1 | B | 2 | NULL
1 | C | 3 | NULL
1 | D | 4 | NULL
2 | C | 1 | 2
2 | B | 2 | 0
2 | A | 3 | -2
2 | D | 4 | 0
例如 C
已经就位了 3
在类别中 1
移动到位置 1
在第2类中,因此具有 change
的 2
. 我试着用 LAG()
偏移量为4的函数,但我失败了,如何编写此查询。
3条答案
按热度按时间t98cgbkg1#
使用
lag()
-用合适的partition by
条款:nr9pn0ug2#
你可以用
lag
然后order by
维持原有秩序。这是演示。输出:
92vpleto3#
我想你只是想
lag()
用右手partition by
:这是一把小提琴。