MERGE
может быть одним из вариантов.
Пример данных:
SQL> alter session set nls_Date_Format = 'yyyy-mm-dd';
Session altered.
SQL> select * from test order by color, datum;
ID COLOR REF DATUM
---------- ------ ---------- ----------
5 black 0 2020-01-04
6 black 0 2020-01-15
3 black 0 2020-01-17
1 orange 0 2020-01-01
2 orange 0 2020-01-02
8 orange 0 2020-02-10
7 red 0 2020-01-01
4 red 0 2020-02-02
9 white 0 2020-03-15
9 rows selected.
Давайте обновим все REF
s до 1
, если есть дубликаты, значение столбца даты которых не является минимальным для этого цвета.
SQL> merge into test t
2 using (select color, min(datum) min_datum
3 from test
4 group by color
5 ) x
6 on (x.color = t.color)
7 when matched then update set
8 t.ref = 1
9 where t.datum > x.min_datum;
5 rows merged.
SQL> select * From test order by color, datum;
ID COLOR REF DATUM
---------- ------ ---------- ----------
5 black 0 2020-01-04
6 black 1 2020-01-15
3 black 1 2020-01-17
1 orange 0 2020-01-01
2 orange 1 2020-01-02
8 orange 1 2020-02-10
7 red 0 2020-01-01
4 red 1 2020-02-02
9 white 0 2020-03-15
9 rows selected.
SQL>