1. ホーム
  2. sql

[解決済み] SQLで実行中のカウンターの "ずれ "を見つけるには?

2022-07-23 06:56:33

質問

SQLテーブルのカウンタ列の最初の"gap"を見つけたいのです。例えば、値1,2,4,5がある場合、私は3を見つけたい。

もちろん、私は値を順番に取得し、手動でそれを通過することができますが、私はSQLでそれを行う方法があるだろうかどうかを知りたいです。

さらに、異なるDBMSで動作する、かなり標準的なSQLである必要があります。

どのように解決するのですか?

MySQLPostgreSQL :

SELECT  id + 1
FROM    mytable mo
WHERE   NOT EXISTS
        (
        SELECT  NULL
        FROM    mytable mi 
        WHERE   mi.id = mo.id + 1
        )
ORDER BY
        id
LIMIT 1

SQL Server :

SELECT  TOP 1
        id + 1
FROM    mytable mo
WHERE   NOT EXISTS
        (
        SELECT  NULL
        FROM    mytable mi 
        WHERE   mi.id = mo.id + 1
        )
ORDER BY
        id

Oracle :

SELECT  *
FROM    (
        SELECT  id + 1 AS gap
        FROM    mytable mo
        WHERE   NOT EXISTS
                (
                SELECT  NULL
                FROM    mytable mi 
                WHERE   mi.id = mo.id + 1
                )
        ORDER BY
                id
        )
WHERE   rownum = 1

ANSI (どこでも使える、一番効率が悪い)。

SELECT  MIN(id) + 1
FROM    mytable mo
WHERE   NOT EXISTS
        (
        SELECT  NULL
        FROM    mytable mi 
        WHERE   mi.id = mo.id + 1
        )

スライディングウィンドウ関数をサポートするシステム。

SELECT  -- TOP 1
        -- Uncomment above for SQL Server 2012+
        previd
FROM    (
        SELECT  id,
                LAG(id) OVER (ORDER BY id) previd
        FROM    mytable
        ) q
WHERE   previd <> id - 1
ORDER BY
        id
-- LIMIT 1
-- Uncomment above for PostgreSQL