如何获得数字范围内的最大连续值?

Bru*_*dy' 2 sql

我在选择中有上面的具体结果:

1   2
1   3
1   5
1   6
1   9
1   10
1   11
1   13
1   14
1   16
1   18
1   20
1   23
1   24
1   25
Run Code Online (Sandbox Code Playgroud)

我想要找到的是结果中出现的最长的逐个链.

例如,我知道3是此数字范围内的最大长度序列,来自最后3个结果(23,24,25连续3个).

Gor*_*off 5

序列将具有数字和顺序排序之间的差异将是恒定的属性.在SQL的大多数方言中,您有一个名为的函数row_number(),它分配序列号.

我们可以用这个观察来解决你的问题:

select (num - seqnum), count(*) as NumInSequence
from (select t.*, row_number() over (order by num) as seqnum
      from t
     ) t
group by (num - seqnum)
Run Code Online (Sandbox Code Playgroud)

这给出了每个序列.要获得最大值,请使用max()子查询或某些版本的limit/ top.例如,在SQL Server中,您可以执行以下操作:

select top 1 count(*) as NumInSequence
from (select t.*, row_number() over (order by num) as seqnum
      from t
     ) t
group by (num - seqnum)
order by NumInSQuence desc
Run Code Online (Sandbox Code Playgroud)