SQL Serverデータベーステーブルに列があり、整数値を含む列があり、系列にギャップがない限り最大値を取得したいので、最初に欠落している値を取得したいと思います。
たとえば、以下の表から、値4を取得しようとしています。
1
2
null
3
上記は単純ですが、テーブルに以下のようなデータが含まれている場合、どのIDが欠落しているかをどのように見つけることができますか?この場合は8になります
1
3
2
4
null
5
7
6
null
10
9
//////////////////
編集:
私は最初に@podiluskaの回答を実装し、それを受け入れるつもりでしたが、10K行を超えるテーブルでテストしたときは非常に遅いので、@ vmvadivelの回答を取得し、以下に示すように少し変更しました。私が望んでいたものを100%ではありません:
SELECT Number
FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY iValue) AS Number
FROM tblNumbers WHERE iValue IS NOT NULL
) temp
WHERE Number NOT IN
(
SELECT iValue FROM tblNumbers WHERE iValue IS NOT NULL
)
これは非常にうまく機能しますが、すべてのiValue
フィールドがnullの場合、何も返されませんが、1を返すようにします。これは、一連の最初の値になるためです。明らかに、C#コードでこれを処理できますが、確かに上記のクエリが行を返さない場合、1を返す方法が必要ですか?
トップレベルSelect Number
を変更しましSELECT Coalesce(Number, 1)
たが、機能しませんでした。これを解決する方法はありますか?
ありがとう