我在选择中有上面的特定结果:

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

我想找到的是结果中出现的最长的递增一链。

例如,我知道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)

这给出了每个序列。要获得最大值,请使用带有子查询的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

10-08 03:55