找到一系列数值中的最大间隙

时间:2014-03-26 13:01:38

标签: sql sql-server-2008

我们有一个包含字段MEMBERNO的大表。由于行被删除,这些值大致是连续的,有一些间隙(下一个数字逻辑是一个简单的

MAX(MEMBERNO) + 1

在T-SQL中,我能找到2个值之间的最大差距吗?我知道我可以用游标来做这件事,但我很想知道它是否可以在T-SQL中完成。

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

1 个答案:

答案 0 :(得分:3)

使用LAG获取前一个memberno并计算差距:

select top(1) memberno, memberno - lag(memberno) over (order by memberno) as gap
from members
order by gap desc;

这是SQL小提琴:http://sqlfiddle.com/#!6/79bc7/6

以下是与子查询相同而不是LAG:

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小提琴:http://sqlfiddle.com/#!3/79bc7/2