Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL:获得具有相同值的最大连续行数的方法?_Php_Mysql_Sql - Fatal编程技术网

Php SQL:获得具有相同值的最大连续行数的方法?

Php SQL:获得具有相同值的最大连续行数的方法?,php,mysql,sql,Php,Mysql,Sql,我正在尝试获取具有连续值的行数的最大计数。例如,如果下面是一个表格,我计算了连续“a”的总数,我会得到5 A. B B A. A. A. A. A. B 我正试图找到一种在SQL中实现这一点的简洁方法。我正试图用PHP实现这一点,但却遇到了困难,并创建了一个混乱的解决方案: $streaksql = "SELECT * FROM `mytable`"; $streaksql = $modx->query($streaksql); $outcomecounter = 0;

我正在尝试获取具有连续值的行数的最大计数。例如,如果下面是一个表格,我计算了连续“a”的总数,我会得到5

A. B B A. A. A. A. A. B 我正试图找到一种在SQL中实现这一点的简洁方法。我正试图用PHP实现这一点,但却遇到了困难,并创建了一个混乱的解决方案:

   $streaksql = "SELECT * FROM `mytable`";
   $streaksql = $modx->query($streaksql);

   $outcomecounter = 0;
   $highestoutcome = 0;

     while ($streak = $streaksql->fetch(PDO::FETCH_ASSOC)) {

                    $outcome = $row['outcome'];

                    if($outcome == 'A'){
                        $outcomecounter = $outcomecounter +1;

                        if($outcomecounter > $highestoutcome){
                            $highestoutcome = $outcomecounter;
                        }

                    }
                    else {
                        $outcomecounter = 0;
                    }  
                };//WHILE

echo $highestoutcome;
我想知道是否有人知道在SQL查询中使用更简洁的方法?

试试这种逻辑

select top 1 col1 from myTable
group by col1
order by count(col2) desc
试试这个:

select COUNT(*)+1
FROM your_table a1
where value=(select value from your_table where your_table.id<a1.id order by id desc LIMIT 1) AND value= 'A'
CMIIW:

参考这篇文章

另一个想法:

SELECT outcome, max(Amount) from (
    SELECT  outcome, 
    IF(@a =outcome, @b := @b+1, @b := 1) as "Amount",
    @a := outcome 
    FROM mytable
    WHERE false = (@b:=0)
    AND outcome = 'A'    
) as test
GROUP by outcome;

你的意思是连续的,对吗?哦,是的,我知道-谢谢可能是感谢的重复,但我在用代码复制它时遇到了问题。你能举一个例子吗?仅仅是sql查询-我很难理解col1的用途,因为我只需要使用我要修改的col值,请检查,select中也只能有一个col。