Mr.Tの場所

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

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

ニュース

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

書庫

日記カテゴリ

2009年7月10日 #

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

こんな感じ。

 

posted @ 12:54 | Feedback (10)