我有一个SQL表,其中包含一个Int类型的列。该列的值没有特定的顺序。数据基本上看起来像这样:1、2、10、25、97、98、105、56999。如何获得该列中的下一个缺失数字?在这种情况下,下一个丢失的数字将是3。
我只想要一个号码;不是所有的人。所有这些都将花费太长时间。我一次只需要一个。我在该网站上看到了其他有关此问题的示例,但它们似乎都涉及获取所有可用数字,而不仅仅是一个数字。
答案 0 :(得分:2)
您可以使用:
select t.col + 1
from t
where not exists (select 1
from t t2
where t2.col = t.col + 1
)
order by t.col asc
fetch first 1 row only;
您也可以使用lead()
:
select min(col + 1)
from (select t.*, lead(col) over (order by col) as next_col
from t
) t
where next_col is null or next_col <> col + 1
答案 1 :(得分:2)
您可以使用CTE
来生成列的滞后版本,然后检查值是否是连续的,并输出最小值,而不是:
with cte as (
select col, lag(col) over (order by col) as lastcol
from test
)
select MIN(lastcol) + 1
from cte
where col != lastcol + 1
答案 2 :(得分:0)
首先想到的是
如果x是您的列名,而test是您的表名:
with cte as (
select x, dense_rank() over(order by x) rnk
from test
)
select min(rnk)
from cte
where x > rnk;