我们有一个包含字段MEMBERNO
的大表。由于行被删除,这些值大致是连续的,有一些间隙(下一个数字逻辑是一个简单的
MAX(MEMBERNO) + 1
在T-SQL中,我能找到2个值之间的最大差距吗?我知道我可以用游标来做这件事,但我很想知道它是否可以在T-SQL中完成。
因此,如果序列为1,2,4,6,8,12,13,14,15,18
,我想返回12
,因为它是最大间隙之后的数字
答案 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。