この質問は、テーブル内の最初の「未使用」の番号を見つける方法を説明していますが、追加の制約を定義できるように同じ番号を見つけるにはどうすればよいですか。100 を超えた後に最初の未使用の数値を取得するようにクエリを変更するにはどうすればよいですか?
たとえば、テーブルに 23、56、100、101、103 がある場合、102 を取得する必要があります。
この質問は、テーブル内の最初の「未使用」の番号を見つける方法を説明していますが、追加の制約を定義できるように同じ番号を見つけるにはどうすればよいですか。100 を超えた後に最初の未使用の数値を取得するようにクエリを変更するにはどうすればよいですか?
たとえば、テーブルに 23、56、100、101、103 がある場合、102 を取得する必要があります。
これがあなたを助けることを願っています
SELECT MIN (id) + 1
FROM myTable T1
WHERE id >= 100
AND NOT EXISTS (SELECT *
FROM myTable T2
WHERE T1.id + 1 = T2.id)
これを使って:
SELECT TOP 1 a1.id + 1 FROM test a1 left JOIN test a2
ON a1.id = a2.id - 1
WHERE a2.id IS NULL AND a1.id > 100
楽しみと利益のために generate_series() を使用する:
CREATE table islands (num INTEGER NOT NULL PRIMARY KEY);
INSERT INTO islands (num ) VALUES
(23), (56), (100), (101), (103) ;
WITH total AS (
SELECT generate_series(mima.bot, mima.top) AS num
FROM ( SELECT MIN(num) AS bot , MAX(num) AS top FROM islands) mima
)
SELECT num
FROM total tt
WHERE num >=100
AND NOT EXISTS (
SELECT *
FROM islands ii
WHERE ii.num = tt.num
)
;