Mr.Tの場所

特攻野郎Aチームじゃないよー

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  253  : 記事  0  : コメント  3732  : トラックバック  52

ニュース

  • 性別:男
  • 猫1:まる
  • 猫2:もろ
  • 猫3:にゃん左部郎
  • タバコ:男は黙ってJPS
[わんくま同盟] C#, VB.NET 掲示板

書庫

日記カテゴリ

Mr.Tです、こんにちは。

SQLで連番関連というのは色々とあるけども、今回考え付いたのは、以下の条件のときのSQL。

 

番号が800000~999999までの間から番号を一つ取得すること。

ただし、取得されていないうちで、一番小さいものから取得していくこと。

取得したら、取得済みテーブルに番号フィールドで保存済する。(番号フィールドはint)

 

なので、取得済みテーブルの登録状況が

【番号】

800000

800001

999999

みたいな取得状況というわけです。

次にとるのは800002ですね。

 

with BaseTmp as (
    select [番号] as pNo
   from [取得済みテーブル]
    where [番号]>=800000
    and [番号]<999999
)
,UpBaseTmp as (
    select [番号]+1 as pNo
   from [取得済みテーブル]
    where [番号]>=800000
    and [番号]<999999
  union ALL
  select 800000
)
select min(T1.pNo)
from UpBaseTmp T1
left join BaseTmp as T2
on T1.pNo = T2.pNo
where T2.pNo is null

こんな感じ。

 

投稿日時 : 2009年7月10日 12:54

コメント

# re: [SQL]連番だけど抜けがある番号群から最小の抜け番号を探す 2009/07/10 14:04 aetos
ぉー。できるんですね。
http://blogs.wankuma.com/ognac/archive/2009/06/04/174087.aspx

# re: [SQL]連番だけど抜けがある番号群から最小の抜け番号を探す 2009/07/10 14:14 Mr.T
や、結構適当な感じなので抜けがあるもw


# re: [SQL]連番だけど抜けがある番号群から最小の抜け番号を探す 2009/07/10 14:41 NAL-6295
こんなの思いつきました。

select
CASE WHEN MIN(番号) + 1 IS NULL THEN 800000
WHEN MIN(番号) + 1 > 999999 THEN NULL
ELSE MIN(番号) + 1 END
from
取得済みテーブル MAIN
where
not exists(select * from 取得済みテーブル SUB where (MAIN.番号 + 1) = SUB.番号)


# re: [SQL]連番だけど抜けがある番号群から最小の抜け番号を探す 2009/07/10 22:30 黒龍
select top 1
BaseTmp.[番号] as pNo
from
[取得済みテーブル] as BaseTmp with (UPDLOCK)
left outer join [取得済みテーブル] as UpBaseTmp on
BaseTmp.[番号] + 1 = UpBaseTmp.[番号]
where
BaseTmp.[番号] >=800000
and
BaseTmp.[番号] < 999999
and
UpBaseTmp.[番号] is null
order by BaseTmp.[番号]
こんなので行けるんでない?こすと見てないけどたぶん小さいはず。

# re: [SQL]連番だけど抜けがある番号群から最小の抜け番号を探す 2009/07/11 3:32 Mr.T
>NAL-6925さん
サブクエリ版ですな。
not existを使える頭がないので参考になります。

>黒龍さん
あれ、黒龍さんのやつだと、最小の抜け番号-1の値がとれちゃうんじゃないですかね?

Joinしているテーブルが[取得済みテーブル]
だから、BaseTmp.[番号]+1 ってすればOkかも。

Minとるよりも、Orderする方がええかな?

どちらにしてもコストはどうなるか、ってところですね。

# re: [SQL]連番だけど抜けがある番号群から最小の抜け番号を探す 2009/07/11 10:18 黒龍
> だから、BaseTmp.[番号]+1 ってすればOkかも。
あ、そだそだ。動かしてないのばればれ^^;

# re: [SQL]連番だけど抜けがある番号群から最小の抜け番号を探す 2009/07/11 14:07 明智重蔵
少しアレンジが必要ですが、分析関数版も
http://codezine.jp/article/detail/1594

# re: [SQL]連番だけど抜けがある番号群から最小の抜け番号を探す 2009/07/12 2:08 Mr.T
おお、旅人算ってのがあるのか。
しかし、nvl関数は予想の斜め上で
何に使えるかよく覚えてないwww

ありがとうございます>明智さん

# re: Ruby で数値を 0 埋めする 2019/01/24 14:09 zzyytt
http://www.fakerolex.us.com
http://www.adidasgazelle.us.com
http://www.goldengooseoutlet.us
http://www.jordanssneakers.us.com
http://www.caterpillarboots.us.com
http://www.nikereact.org
http://www.mlbjerseys.in.net
http://www.longchamphandbags.co.uk
http://www.yeezyboost350v2shoes.us.com
http://www.curry6shoes.com
http://www.balenciagashoes.us.com
http://www.yeezyboost.in.net
http://www.retro-jordans.us.com
http://www.curry5.us.com
http://www.nike-shox.us.com
http://www.goyardbags.us
http://www.valentinosshoes.us
http://www.michael-kors-handbags.com.co
http://www.goyardhandbags.org
http://www.yesyeezy.shop


Post Feedback

タイトル
名前
Url:
コメント