列に連続番号を入力したいのですが、単一のシーケンスでは不十分です。この列は、必要に応じて「サブID」のように動作します。テーブル内のレコードのグループの増分ID。
計画は、通常の方法と同じように、トリガーを使用して挿入するときに「シーケンスの次の番号」を取得することsequence
です。ただし、「次の番号」だけでなく、特定の結果セットの「次の番号」である必要があります。
次のサンプルデータについて考えてみます。ここで、display_id
列は管理の助けが必要なシーケンスであり、レコードの値に依存していgroup_name
ます。
id | group_name | display_id ------------------------------ 5 | GroupA | 3 4 | GroupA | 2 3 | GroupA | 1 2 | GroupB | 2 1 | GroupB | 1
私はこのクエリのようなクエリを考えて、次の「次の番号」を取得しますGroupA
。
select max(record_id) + 1
from my_records
where group_name = 'GroupA'
それGroupA
は4を返しますが、GroupB
それは3を返します。
もちろん、上記のクエリを使用することはできますが、のアトミックな利点は失われますsequence
。そのようなシーケンスを自信を持って管理する方法はありますか?
数字がスキップされる可能性については心配していません(シーケンスのように)。
編集:(
シーケンスの場合と同様に)ロールバックなどが原因で1つか2つが欠落していることに満足しています。ただし、それでも、display_id
列が複数のシーケンスを維持する必要があります。