1

我的 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 查询吗?

4

2 回答 2

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
于 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 回答