我在选择中有上面的具体结果:
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个).
序列将具有数字和顺序排序之间的差异将是恒定的属性.在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)