Еще одна слегка запутанная опция, чтобы установить значения 0
и 1
в одном попадании:
update my_table mt
set col4 = (
select case when rn = 1 then 1 else 0 end
from (
select id,
row_number() over (partition by col1, col3 order by id) as rn
from my_table) tt
where tt.id = mt.id);
4 rows updated.
select * from my_table order by id;
ID COL1 COL3 COL4
---------- ---- ---- ----------
1 x r 1
2 y m 1
3 z p 1
4 x r 0
Это просто использование row_number()
, чтобы решить, какая из уникальных комбинаций является первой, произвольно используя самое низкое id
, присвоив этому значение единицу, а все остальное - ноль.