Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 更新表列特殊顺序和分组_Sql_Oracle_Plsql - Fatal编程技术网

Sql 更新表列特殊顺序和分组

Sql 更新表列特殊顺序和分组,sql,oracle,plsql,Sql,Oracle,Plsql,我有一张带有照片的表格,文档id为空,我想更新文档id,按类型id分组,但下一个类型id与新文档id不同,例如 id case type_id pnum doc_id 1000001 1000001 2101 20 1 1000002 1000001 2101 40 1 1000003 1000001 2101 60 1 1000004

我有一张带有照片的表格,文档id为空,我想更新文档id,按类型id分组,但下一个类型id与新文档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

使用
lag
将当前行的type\u id与前一行进行比较,然后使用running sum将相同的数字分配给具有相同type\u 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

你需要在什么基础上增加doc_id?incrimint doc_id grup by type_id,但是下一个type_id不相同,它是新doc_id,我有相同的想法..我没有足够的速度来制定查询:)