我在我的SQL表“Tokendata”中有一列TokenId列表。Sql查询获取下一个令牌编号
The TokenId has values say 1,2,3,4,6,7,8,10,11
这里上面的tokenIds被占用。当我查询这个表时,它应该给我下一个自由tokenId,在这种情况下它应该是。
如果TokenId具有价值说“1,2,3,4,5,6,7,8,10,11,13,20”,查询应该返回我。
任何人都可以帮我一个SQL查询呢?
我在我的SQL表“Tokendata”中有一列TokenId列表。Sql查询获取下一个令牌编号
The TokenId has values say 1,2,3,4,6,7,8,10,11
这里上面的tokenIds被占用。当我查询这个表时,它应该给我下一个自由tokenId,在这种情况下它应该是。
如果TokenId具有价值说“1,2,3,4,5,6,7,8,10,11,13,20”,查询应该返回我。
任何人都可以帮我一个SQL查询呢?
这是我的问题的答案。但这可能不是乐观的解决方案。欢迎优化的解决方案
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)
注意:根据评论更新为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
也许它是不相关的,但我只是好奇:你的问题被标记为'mysql',但你的答案脚本是Transact-SQL。为什么?你真的想要哪种平台的解决方案? – 2012-04-25 11:16:36