二次シーケンスにギャップがないという実際の要件はありますか?もしそうなら、あなたは巨大なシリアル化/スケーラビリティの問題を抱えています。
人間が消費するためにギャップのないシーケンスを提示する必要がある場合は、Nick Pierpontが提案し、スケーラビリティを維持するように、実際のシーケンス(またはタイムスタンプ)を使用できます。分析関数を使用できます。
データセット(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;
結果:
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