I want to calculate the duplicate value counter first, and then use it for another column to be updated.
How can I achieve that?
first, I have a table below:
| id | another_id |
|---|---|
| 1 | null |
| 1 | null |
| 1 | null |
| 2 | null |
| 2 | null |
| 2 | null |
| 2 | null |
| … | … |
| N | null |
and then calculating duplicate value count for id:
| id | another_id | duplicate_cnt |
|---|---|---|
| 1 | null | 1 |
| 1 | null | 2 |
| 1 | null | 3 |
| 2 | null | 1 |
| 2 | null | 2 |
| 2 | null | 3 |
| 2 | null | 4 |
| … | … | … |
| N | null | X |
Finally, using all duplicate_cnt to UPDATE another_id:
| id | another_id | duplicate_cnt |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 2 | 2 |
| 1 | 3 | 3 |
| 2 | 1 | 1 |
| 2 | 2 | 2 |
| 2 | 3 | 3 |
| 2 | 4 | 4 |
| … | … | … |
| N | X | X |
Suggestions are greatly appreciated!
Advertisement
Answer
I would recommend just reconstructing the table:
create table temp_t as
select t.*, row_number() over (partition by id order by id) as seqnum
from t;
truncate table t;
insert into t (id, another_id)
select id, seqnum
from temp_t;
Note: Be very careful before using truncate table. Check the results first!