
連番の歯抜け値を取得するSQLを作りたいと思っています。
例えば、カラムAに、1,2,3,5,6,7,9,10(4と8が抜けている)
と数値の入っているテーブルAがあるとします。
これに対して、
SELECT MIN(カラムA + 1)
FROM テーブルA
WHERE (カラムA + 1) NOT IN (SELECT カラムA FROM テーブルA)
とSQLを投げた場合、4が取得できます。
これにbetween句を付与したいのですが、そうすると境界値が
なぜか取れなくて困ってます。
具体的には、
SELECT MIN(カラムA + 1)
FROM テーブルA
WHERE (カラムA + 1) NOT IN (SELECT カラムA FROM テーブルA)
AND BETWEEN 8 AND 10
とした場合、NULLが返ってきてしまいます。
普通、BETWEENは境界値も対象になるはずですが、何故このような
結果になってしまうのでしょうか?
修正点をご教授いただけないでしょうか?
宜しくお願いします。
No.4ベストアンサー
- 回答日時:
SQL Server 2005で動けばいいのですよね?
SQL例です。
select coalesce(max(seq), 0) + 1 as gap
from (select seq, Row_Number() over(order by seq) as Rank
from SeqTbl)
where seq = Rank;
http://codezine.jp/a/article/aid/1269.aspx
No.3
- 回答日時:
>SQL server2005です。
当方、SQL Server 2005 Expressを使っていますが、こちらでは想定通り動きます。提示のデータ例、SQL例が実際に実行しているものと合致していないのではないでしょうか?
>1の行というのは、たとえば0,2,3,4…というようにデータが入っている場合はうまくいかない、ということでしょうか?
1からの連番とした場合、「1」や「1と2」といった最初の番号が欠番となっている場合、その値は拾えないという意味です。
例えば、
3,5,6,7,9,10(1~2、4と8が抜けている)
といった場合は、欠番の最小値として4しか拾えないという意味です。
そういったケースがないなら、問題ありません。
この回答への補足
回答ありがとうございます。
最初のSQLは、 (カラムA + 1) BETWEEN~とすべきところを
カラムA BETWEEN~としていたのがおかしかったようです。
>そういったケースがないなら、問題ありません。
1、2がないのに、BETWEENに1から10の範囲を設定することが
あるので、そういう場合に困ってしまいますね…。
No.1
- 回答日時:
SELECT MIN(カラムA + 1)
FROM テーブルA
WHERE (カラムA + 1) NOT IN
(SELECT カラムA FROM テーブルA
WHERE カラムA BETWEEN 8 AND 10)
ということでしょうか?
この回答への補足
スイマセン、SQL間違ってましたね。
SELECT MIN(カラムA + 1)
FROM テーブルA
WHERE (カラムA + 1) NOT IN (SELECT カラムA FROM テーブルA)
AND カラムA BETWEEN 8 AND 10
と記述しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLのエラー(~付近に不適切な...
-
SQL Date型の列から年月だけを...
-
Accessの重複なしのカウントの...
-
SQLサーバで和暦から西暦に変換...
-
Microsoft SQL Serverについて
-
Wacom Cintiq 16 と Wacom Cint...
-
SQLをはじめから勉強するには
-
SQL クエリ データ数
-
SQL Server management studio ...
-
Tverは無料でしょうか?
-
サーバー破壊
-
Visuaal Studio Community 2022...
-
Access2021 「ISNULL関数には引...
-
甘いものがすきなのってなおせ...
-
SQLて何ですか!
-
生え際から顎先まで17.5 頭頂か...
-
sql serveについて
-
SQLを駆使したデータ抽出ってど...
-
自己相関サブクエリと自己結合...
-
DBのテーブルの設計ができず困...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT文で、指定カラム以外の...
-
一部のカラムでdistinctし全て...
-
UNIONする際、片方テーブルしか...
-
ホームページを作ろうと思いま...
-
AUTO_INCREMENTに0はダメ?
-
SQLでカラムを追加し、条件に合...
-
MYSQLで全てのカラムから検索す...
-
now()かCURRENT_TIMESTAMPか
-
カラムとコラムの使い分け
-
MySQLで論理名を取得する方法
-
GREATESTで NULLをスルーする方...
-
【SQL】select に ワイルドカー...
-
エクセルかワードで家系図を作...
-
カラムをコピーして、新規カラ...
-
波形データを格納するデータベース
-
update時にtimestampが更新され...
-
カラム表示の幅
-
アドレスブックの登録について
-
最大2147483647なのに何故int(1...
-
MySQLで先頭にカラムを追加
おすすめ情報