2012-04-19 22 views
1

SQLテーブル "Tokendata"にカラムTokenIdリストがあります。次のトークン番号を取得するためのSqlクエリ

The TokenId has values say 1,2,3,4,6,7,8,10,11 

ここでは、上記のtokenIdsが使用されています。このテーブルを照会すると、次の空きトークンIDが与えられます。この場合、になります。

のTokenIdが値を持っている場合は、を言う "1,2,3,4,5,6,7,8,10,11,13,20"、クエリは私にを返す必要があります。

誰でも私にこのことについてのSQLクエリを手伝ってもらえますか?

答えて

0

ここに私の質問に対する答えがあります。しかし、楽観的な解決策ではないかもしれません。最適化されたソリューションは大歓迎です

DECLARE @TempTable TABLE 
(
    TableID int PRIMARY KEY IDENTITY, 
    TokenId int 
) 
Insert Into @TempTable 
    Select tt.TokenId from XLBDataPoint tt where tt.TokenId= 1 
DECLARE @RowCount INT 
SET @RowCount = (SELECT COUNT(*) FROM @TempTable) 

(SELECT 
Top 1 t.TokenId + @RowCount 
FROM TokenData t 
Where t.TokenId+ @RowCount NOT in 
(select t2.TokenId FROM TokenData t2) 
+0

多分それは無関係ですが、私は興味があります:あなたの質問は「mysql」とタグ付けされていますが、答えのスクリプトはTransact-SQLです。どうして?実際にどのプラットフォームを解決したいのですか? –

4

注:コメントごとに1が欠けている場合を考慮して更新されています。

SELECT 
    t.TokenId + 1 
FROM (
    SELECT TokenId 
    FROM Tokendata 
    UNION ALL 
    SELECT 0 
) t 
    LEFT JOIN Tokendata t2 ON t.TokenId = t2.TokenId - 1 
WHERE t2.TokenId IS NULL 
ORDER BY t.TokenId 
LIMIT 1 
+0

このデータ "2,3,4,5,6,7,8"に対しては9が返されます。しかし、実際にそれを返す必要があります。 – Rockstart

+0

「1」は常に始まりでなければならないということは一度も言及していません。とにかく、私の編集はそれを世話するべきだと思います。 –

+0

@Andiry:まだ動作していません – Rockstart

関連する問題