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