Sql 确定一系列数值中的最大间隙

Sql 确定一系列数值中的最大间隙,sql,sql-server-2008,Sql,Sql Server 2008,我们有一个带有字段MEMBERNO的大表。由于删除了行,这些值大致是按顺序排列的,有一些间隙。下一个数字逻辑很简单 MAX(MEMBERNO) + 1 在T-SQL中,我可以找到两个值之间的最大间隙吗?我知道我可以用游标来完成,但我很想看看是否可以用T-SQL来完成 因此,如果序列是1,2,4,6,8,12,13,14,15,18,我想返回12,因为它是最大间隙后的数字使用LAG获得前一个memberno并计算间隙: select top(1) memberno, memberno - lag

我们有一个带有字段MEMBERNO的大表。由于删除了行,这些值大致是按顺序排列的,有一些间隙。下一个数字逻辑很简单

MAX(MEMBERNO) + 1
在T-SQL中,我可以找到两个值之间的最大间隙吗?我知道我可以用游标来完成,但我很想看看是否可以用T-SQL来完成


因此,如果序列是1,2,4,6,8,12,13,14,15,18,我想返回12,因为它是最大间隙后的数字

使用LAG获得前一个memberno并计算间隙:

select top(1) memberno, memberno - lag(memberno) over (order by memberno) as gap
from members
order by gap desc;
下面是SQL提琴:

对于子查询而不是滞后查询,情况也是如此:

select top(1) memberno, memberno - 
  (select max(memberno) from members x where x.memberno < members.memberno) as gap
from members
order by gap desc;

SQL小提琴:。

@Mihai-非常感谢。你能不能把它作为一个答案,这样我就可以把它标记为正确的答案?答案不仅仅是一个链接,等待别人的努力,我太懒了。Thorsten-非常感谢。不幸的是,在SQLServer2008ah中,LAG不是一个可用的函数。对不起,我不知道。当然,首先想到的是滞后。直截了当地说。然而,在这样的简单选择中,您可以轻松地用子查询替换它。我将更新我的答案。将其更改为sql server 2008,这样就不会有任何疑问。无论如何,谢谢Thorsten。我们很快就要升级到2012年了,这将作为一个可能的解决方案留在我的脑海中是的,Mihai,你是对的,我已经相应地改变了方向。