首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MYSQL中的序列

MYSQL中的序列
EN

Stack Overflow用户
提问于 2016-06-07 06:56:55
回答 2查看 100关注 0票数 0

在MYSQL中有没有办法跟踪连续数字的子序列?

我想计算数字序列中最高的连续子序列:

代码语言:javascript
运行
复制
1,2,3,4,6,7 => 4 (1-4)
1,2,3,4,5,6,8 => 6 (1-6)
1,2,3,5 => 3 (1-3)
1,2,3,5,6,7,8 => 4 (5-8)
1,2,4,5,6,8,9 => 3 (4-6)
EN

回答 2

Stack Overflow用户

发布于 2016-06-07 09:08:01

根据你的问题,这段代码应该可以工作:

代码语言:javascript
运行
复制
function findHighestSeriesCount( $seriesArray )
{
    if ( 1 >= count( $seriesArray ) )
    {
        # catch the special case when array has only 0 or 1 element
        return count( $seriesArray );
    }
    $highestCount = -1;
    $currentCount = 1;
    $lastElement = $seriesArray [0];

    $getCorrectHighValue = function() use ( &$highestCount, &$currentCount )
    {
        return $highestCount < $currentCount ? $currentCount : $highestCount;
    };

    for ( $arrayIndex = 1 ; $arrayIndex < count( $seriesArray ) ; $arrayIndex++ )
    {
        if ( $lastElement + 1 == $seriesArray [$arrayIndex] )
        {
            $currentCount++;
        }
        else
        {
            $highestCount = $getCorrectHighValue();
            $currentCount = 1;
        }
        $lastElement = $seriesArray [$arrayIndex];
    }

    return $getCorrectHighValue();
}

测试脚本:

代码语言:javascript
运行
复制
$seriesArray = [1,2,3,4,6,7];
echo sprintf( "array=%s - highest count=%d<br>", implode( ",", $seriesArray ), 
     findHighestSeriesCount( $seriesArray ) );

$seriesArray = [1,2,3,4,5,6,8];
echo sprintf( "array=%s - highest count=%d<br>", implode( ",", $seriesArray ), 
     findHighestSeriesCount( $seriesArray ) );

$seriesArray = [1,2,3,5];
echo sprintf( "array=%s - highest count=%d<br>", implode( ",", $seriesArray ), 
     findHighestSeriesCount( $seriesArray ) );

$seriesArray = [1,2,3,5,6,7,8];
echo sprintf( "array=%s - highest count=%d<br>", implode( ",", $seriesArray ), 
     findHighestSeriesCount( $seriesArray ) );

$seriesArray = [1,2,4,5,6,8,9];
echo sprintf( "array=%s - highest count=%d<br>", implode( ",", $seriesArray ), 
     findHighestSeriesCount( $seriesArray ) );

输出:

代码语言:javascript
运行
复制
array=1,2,3,4,6,7 - highest count=4
array=1,2,3,4,5,6,8 - highest count=6
array=1,2,3,5 - highest count=3
array=1,2,3,5,6,7,8 - highest count=4
array=1,2,4,5,6,8,9 - highest count=3
票数 0
EN

Stack Overflow用户

发布于 2016-06-07 09:31:58

假设数据存储为一列,您可以通过查找最长的连续序列来获得最大值。这个想法很简单,就是减去另一个序列。。。在这些值是恒定的情况下,你知道你有一个序列。

其余的只是聚合。这看起来像这样:

代码语言:javascript
运行
复制
select count(*)
from (select t.*, (@rn := @rn + 1) as rn
      from t cross join (select @rn := 0) params
     ) t
group by (col - rn)
order by count(*) desc
limit 1;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37668054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档