Sql查询获取下一个令牌号

时间:2012-04-19 12:46:13

标签: mysql sql

我的SQL表“Tokendata”中有一个列TokenId列表。

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

这里上面的tokenIds被占用了。当我查询这个表时,它应该给我下一个免费的tokenId,在这种情况下它应该是 5

如果TokenId的值为“1,2,3,4,5,6,7,8,10,11,13,20”,则查询应该返回 9

任何人都可以帮我解决SQL查询吗?

2 个答案:

答案 0 :(得分:3)

注意:根据评论更新以解决缺少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

答案 1 :(得分: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)