sql - 表中的更新序列 - Oracle
问题描述
我有一张桌子:
表格1
u_a_id element_id my_seq line_num
1 HI01-01 1 30
1 HI01-02 1 30
1 HI01-01 1 31
1 HI01-02 1 31
1 HI02-03 1 31
1 HI02-04 1 31
2 HI01-01 1 40
2 HI01-02 1 40
2 HI02-01 1 40
2 HI02-02 1 40
2 HI02-03 1 40
2 HI02-04 1 40
2 HI03-02 1 41
2 HI03-03 1 41
2 HI05-04 1 41
2 HI05-05 1 41
如果新的 HI01 出现在相同的 u_a_id 或 HI 更改的计数器中,我需要更新 my_seq,例如。HI01 -> 每个 u_a_id 订单的 HI02,按 line_num。
我有这个查询,但是即使对于 u_a_id = 1 中的 HI01-01 的第二个实例,这也会使 seq 为 1:
select t.*,
dense_rank() over (partition by u_a_id order by substr(element_id, 1, 4)) as new_my_seq
from table1 t
输出如下所示:
u_a_id element_id my_seq line_num
1 HI01-01 1 30
1 HI01-02 1 30
1 HI01-01 2 31
1 HI01-02 2 31
1 HI02-03 3 31
1 HI02-04 3 31
2 HI01-01 1 40
2 HI01-02 1 40
2 HI02-01 2 40
2 HI02-02 2 40
2 HI02-03 2 40
2 HI02-04 2 40
2 HI03-02 3 41
2 HI03-03 3 41
2 HI05-04 4 41
2 HI05-05 4 41
Oracle SQL 中有没有办法实现这一点?
解决方案
我想你只是想要:
select t.*,
dense_rank() over (partition by u_a_id
order by line_num,
substr(element_id, 1, 4)
) as my_seq
from t;
推荐阅读
- sql - Oracle TO_CHAR 问题 - 如何正确格式化数字?
- wordpress - 有没有办法阻止用户访问所有站点,而不仅仅是 wp-login.php
- php - 如何访问位于 codeigniter 4 中“folder_name/controller_name”的控制器?
- python - 使用 Python 从语义上检测文本块
- android - Expo v31 Android 发布版本不会加载 JS 包(iOS 版本适用于调试和发布配置)
- gem5 - 如何用树构建gem5?
- python - Python Pandas,布尔索引:如何选择具有“真”值的所有行
- amazon-web-services - 在 Auto Scaling AMI 启动中如何在新实例中复制我的私钥文件
- rfid - hf14b raw 命令是否允许我发送和接收 APDU 消息?
- python - Python 线程不能同时工作