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

SQLのすべての整数ギャップを検索します

    アイデアは、ギャップがどこから始まるかを調べることです。 SQL Server 2012を使用していると仮定します。そのため、lag()を使用します。 およびlead() 機能。次は次のidを取得します :

    select t.*, lead(id) over (order by id) as nextid
    from t;
    

    ギャップがある場合は、nextid <> id+1whereを使用してギャップを特徴付けることができるようになりました :

    select id+1 as FirstMissingId, nextid - 1 as LastMissingId
    from (select t.*, lead(id) over (order by id) as nextid
          from t
         ) t
    where nextid <> id+1;
    

    編集:

    lead()なし 、相関サブクエリでも同じことをします:

    select id+1 as FirstMissingId, nextid - 1 as LastMissingId
    from (select t.*,
                 (select top 1 id
                  from t t2
                  where t2.id > t.id
                  order by t2.id
                 ) as nextid
          from t
         ) t
    where nextid <> id+1;
    

    idを想定 がテーブルの主キーである場合(またはインデックスがある場合でも)、どちらの方法でも妥当なパフォーマンスが得られるはずです。



    1. MySQLのパフォーマンス:SQLのJOINの概要

    2. 配列をoracleプロシージャに渡します

    3. UbuntuからMySQLを完全に削除する方法

    4. エラー!サーバーはPIDファイル(/usr/local/var/mysql/`username`.lan.pid)を更新せずに終了します