【问题标题】:Update table column spetial ordering and grouping更新表列特殊排序和分组
【发布时间】:2017-07-19 13:23:01
【问题描述】:

我有一个表 W_PHOTO 并且 doc_id 为空,我想更新 doc_id,按 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

【问题讨论】:

  • 你需要在什么基础上增加doc_id?
  • 按 type_id 增加 doc_id grup,但下一个 type_id 与新的 doc_id 不同

标签: sql oracle plsql


【解决方案1】:

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

【讨论】:

  • 我也有同样的想法..虽然我不够快来制定查询:)
猜你喜欢
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 2015-10-30
相关资源
最近更新 更多