我在选择中有上面的特定结果:
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