1

SQL テーブル「Tokendata」に列 TokenId リストがあります。

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

ここでは、上記の tokenId が占有されています。このテーブルにクエリを実行すると、次の空き tokenId が返されます。この場合は5になります。

TokenId の値が"1,2,3,4,5,6,7,8,10,11,13,20"の場合、クエリは me 9を返す必要があります。

これに対するSQLクエリを手伝ってくれる人はいますか?

4

2 に答える 2

3

Note: updated to account for cases where 1 is missing, as per the comment.

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
于 2012-04-19T12:56:23.847 に答える
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)
于 2012-04-25T06:13:03.160 に答える