Последовательность обновления в таблице - Oracle - PullRequest
1 голос
/ 03 июня 2019

У меня есть таблица:

table1

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

Мне нужно обновить my_seq, если новый HI01 появляется в том же u_a_id или в счетчике изменений HI, например.HI01 -> HI02 для каждого заказа u_a_id по line_num.

У меня есть этот запрос, однако он дает seq как 1 даже для второго экземпляра HI01-01 в u_a_id = 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, чтобы достичь этого?

Ответы [ 2 ]

2 голосов
/ 03 июня 2019

Я думаю, вы просто хотите:

select t.*,
       dense_rank() over (partition by u_a_id
                          order by line_num,
                                   substr(element_id, 1, 4)
                         ) as my_seq
from t;
0 голосов
/ 03 июня 2019

Вы можете захотеть упорядочить по line_num вместо substr (element_id, 1, 4) и поместить substr (element_id, 1, 4) в раздел на.

select t.*,
          dense_rank() over (partition by u_a_id, substr(element_id, 1, 4) order by line_num) as new_my_seq
   from table1 t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...