3
A
回答
1
假設你在表中的序列YourNumbersTable 試試這個(SQL Server 2005+):
declare @min int, @max int
select @min = MIN(Id), @max = MAX(Id) from YourNumbersTable
;WITH numbers(id) as
(
SELECT @min id
UNION ALL
SELECT id+1
FROM numbers
WHERE id <= @max
)
SELECT MIN(Numbers.id)
FROM Numbers
LEFT JOIN YourNumbersTable ON Numbers.Id = YourNumbersTable.Id
WHERE YourNumbersTable.Id IS NULL
OPTION(MAXRECURSION 0)
3
declare @T table(Number int)
insert into @T values (1),(2),(3),(13),(15)
select top 1 Number + 1
from @T
where Number + 1 not in (select Number from @T)
order by Number
更新:
使用炭(3)零填充一個版本。
declare @T table(ID char(3))
insert into @T values ('001'),('002'),('003'),('013'),('015')
select top 1 right(1001 + Id, 3)
from @T
where Id + 1 not in (select Id from @T)
order by Id
0
也許我有一個替代解決方案。由於其中的循環,它可能在較寬的數字範圍內變慢。
-- prepare a table to have your example
declare @ref table (id int)
insert into @ref (id) values (1), (2), (3), (13), (15)
-- this will return 1
select min(id) from @ref
-- magic happens here
declare @i int, @max int, @returnValue int
select @i = min(id), @max = max(id) from @ref
declare @tmp table (id int)
while @i <= @max
begin
insert into @tmp (id) values (@i)
set @i = @i + 1
end
select @returnValue = min(t.id)
from @tmp t left outer join @ref r on t.id = r.id
where r.id is null
-- this will return 4
select @returnValue
1
試試這個(無連接,無REC-CTE)
declare @T table(n int)
insert into @T values (1),(2),(3),(13),(15)
select max(n)+1 from (
select *,l=n-row_number() over(order by n)
from (
select n from @T
union
select 0 -- what about 0 ??
) as s
) as a
where l=-1
1
這類似於what @szauri has suggested,但沒有聚集:
;
WITH ranked AS (
SELECT n, r = ROW_NUMBER() OVER (ORDER BY n)
FROM @T
)
SELECT TOP 1 r
FROM ranked
WHERE n <> r
ORDER BY n
提示:這兩種@ szauri和我的解決方案需要SQL Server 2005或更高版本。
相關問題
- 1. TSQL - 查找範圍中的最小
- 2. 找到最小正值
- 3. 找到golang的最小值?
- 4. MATLAB:fmincon找不到最小值
- 5. Python,lambda,找到最小值
- 6. 試圖找到最小值
- 7. 找到最長距離的最小值
- 8. 找到最小和最大像素值
- 9. 查找本地最小值最小值
- 10. TSQL程序找到的最大素數
- 11. 有最小值和最小值的需求尋找,然後找到對象
- 12. 下劃線找到對象值的最小值和最大值
- 13. 找到[最大值,最小值在列表蟒列表值
- 14. Excel:找到範圍中的最小值
- 15. 找到一個數組的最小值
- 16. 找到活動圖表的最小值
- 17. 找到最小值,以滿足模數
- 18. 準確找到最小特徵值
- 19. 找到信號的局部最小值
- 20. Python scipy優化未找到最小值
- 21. 找到存儲最小值的元素
- 22. 找到最小值但爲零
- 23. Dijkstra算法多邊找到最小值
- 24. 找到2個論據的最小值
- 25. 找到座標點的最小值
- 26. 試圖找到與CTE最小值
- 27. 找到一組輸入的最小值
- 28. matlab找到最小值無約束
- 29. 找到變量中的最小值?
- 30. 找到兩個最小的值輸入
這通常工作得很好,但如果'009'被存儲爲'CHAR(3)',這將如何工作?問題中的前導零使我認爲它是一個「CHAR」而不是「INT」字段。只是想知道:) – Seph 2011-12-29 08:15:02
@Seph - 添加了一個char(3)作爲數據類型的版本。除了結果值以及存在大量隱式類型轉換並且不會在'Number'上使用任何索引的事實之外,沒有什麼區別。 – 2011-12-29 08:19:59