sql >> データベース >  >> RDS >> Oracle

OraclePartitionedSequence

    二次シーケンスにギャップがないという実際の要件はありますか?もしそうなら、あなたは巨大なシリアル化/スケーラビリティの問題を抱えています。

    人間が消費するためにギャップのないシーケンスを提示する必要がある場合は、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
    


    1. グループごとに最初と最後の行から値を取得します

    2. ディスクI/Oのボトルネックのトラブルシューティング

    3. 実行計画の品質に対する10の一般的な脅威

    4. SQLServerインスタンスのすべてのデータベースで主キー制約のないテーブルのリストを取得する方法-SQLServer/TSQLチュートリアルパート62