SQL在列中查找下一个丢失的数字

时间:2019-12-11 02:36:20

标签: sql sql-server

我有一个SQL表,其中包含一个Int类型的列。该列的值没有特定的顺序。数据基本上看起来像这样:1、2、10、25、97、98、105、56999。如何获得该列中的下一个缺失数字?在这种情况下,下一个丢失的数字将是3。

我只想要一个号码;不是所有的人。所有这些都将花费太长时间。我一次只需要一个。我在该网站上看到了其他有关此问题的示例,但它们似乎都涉及获取所有可用数字,而不仅仅是一个数字。

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

Demo on dbfiddle

答案 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;