Apakah persyaratan aktual bahwa urutan sekunder bebas celah? Jika demikian, Anda memiliki masalah serialisasi/skalabilitas yang sangat besar.
Jika Anda perlu menyajikan urutan bebas celah untuk konsumsi manusia, Anda dapat menggunakan urutan aktual (atau stempel waktu, dalam hal ini) seperti yang disarankan Nick Pierpont dan mempertahankan skalabilitas, Anda dapat menggunakan fungsi analitik.
Kumpulan Data (t1):
ID_PERSON SEQUENCE_ID
---------- -----------
1 1
2 2
3 3
1 4
1 5
1 6
2 7
3 8
1 9
SQL:
select *
from
(select id_person,
sequence_id as orig_sequence_id,
rank ()
over (partition by id_person
order by sequence_id)
as new_sequence_id
from t1
)
order by id_person, new_sequence_id;
Hasil:
ID_PERSON ORIG_SEQUENCE_ID NEW_SEQUENCE_ID
---------- ---------------- ---------------
1 1 1
1 4 2
1 5 3
1 6 4
1 9 5
2 2 1
2 7 2
3 3 1
3 8 2