我有一个表W_PHOTO,doc_id为null,我想更新doc_id,group by type_id,但是下一个type_id与新的doc_id不一样,例如
id case type_id pnum doc_id
1000001 1000001 2101 20 1
1000002 1000001 2101 40 1
1000003 1000001 2101 60 1
1000004 1000001 106 70 2
1000005 1000001 106 80 2
1000006 1000001 1199 100 3
1000007 1000001 1103 120 4
1000008 1000001 7 140 5
1000009 1000001 106 160 6
1000010 1000001 2103 180 7
1000011 1000001 2105 200 8
1000012 1000001 2106 220 9
1000013 1000001 2104 240 10
1000014 1000001 2202 260 11
1000015 1000001 1104 280 12
1000016 1000001 103 310 13
1000017 1000001 103 320 13
1000018 1000001 103 340 13
1000019 1000001 1199 380 14
1000020 1000001 2104 400 15
1000021 1000001 2104 420 15
1000022 1000001 2104 440 15
1000023 1000001 2104 460 15
答案 0 :(得分:2)
使用lag
将当前行的type_id与前一行进行比较,然后使用运行总和为具有相同type_id值的连续行分配相同的数字。
select t.*,sum(col) over(order by id) as doc_id
from (select t.*,
case when type_id=lag(type_id) over(order by id) then 0 else 1 end as col
from t
) t