是否可以按顺序使用2列滞后?如果不是我会怎么做呢?
这就是我现在所拥有的:
LAG(GOOD_QTY) Over (Order By SEQUENCE_NO) As Value
这就是我想要的:
LAG(GOOD_QTY) Over (Order By SUB_ID DESC,SEQUENCE_NO) As Value
我需要延迟来确定Sub_ID的优先级,因为需要首先检查所有子ID操作。
这是我的意思/想要的可视化。
这是初始值/表:
SEQ_NO SUB_ID value
-------------
10 0 50
30 0 200
20 0 75
25 0 100
10 1 150
20 1 250
这是我想要的滞后函数后发生的2阶×
SEQ_NO SUB_ID value
-------------
10 0 250
30 0 100
20 0 50
25 0 75
10 1 NULL
20 1 150
所以基本上我想用所有具有sub_id = 1
的值并且在sub_id = 0
的所有值之前执行滞后函数。完成所有sub_id = 1
值后,它应继续转到sub_id = 0
值,将sub_id = 1
的最后一个值传递给带sub_id = 0
的第一个seq_no
只是弄清楚如何首先执行所有sub_id = 1
值,然后执行sub_id = 0
值就足够了,我可以找出其余的值。
答案 0 :(得分:1)
使用lag()
获得所需结果时,您需要order by sub_id desc, seq_no
:
select seq_no, sub_id
, value = lag(value) over (order by sub_id desc, seq_no)
from t
order by sub_id, seq_no
rextester演示:http://rextester.com/YHCIOD53469
返回:
+--------+--------+-------+
| seq_no | sub_id | value |
+--------+--------+-------+
| 10 | 0 | 250 |
| 20 | 0 | 50 |
| 25 | 0 | 75 |
| 30 | 0 | 100 |
| 10 | 1 | NULL |
| 20 | 1 | 150 |
+--------+--------+-------+
您还可以使用lead(value) over (order by sub_id, seq_no desc)
获得相同的结果。