【问题标题】:SQL: Way to get highest count of consecutive rows with same value?SQL:如何获得具有相同值的连续行的最高计数?
【发布时间】:2014-05-13 13:43:35
【问题描述】:

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

  1. 一个
  2. B
  3. B
  4. 一个
  5. 一个
  6. 一个
  7. 一个
  8. 一个
  9. 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 查询中执行此操作的更简洁的方法?

【问题讨论】:

标签: php mysql sql


【解决方案1】:

试试这个逻辑,

select top 1 col1 from myTable
group by col1
order by count(col2) desc

【讨论】:

  • 谢谢,但我在用我的代码复制它时遇到问题。有没有机会举个例子?
  • 只是 sql 查询 - 我无法理解 col1 的用途,因为我只需要使用我想要计算的值来处理 col
  • Ans已修改,请检查,您也只能选择一个列。
【解决方案2】:

试试这个:

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 :)

来自这篇文章的参考Mysql Counting the consecutive number rows that match

【讨论】:

    【解决方案3】:

    另一个想法:

    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;
    

    【讨论】:

      猜你喜欢
      • 2014-11-03
      • 2014-04-21
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2020-05-28
      • 2019-05-09
      相关资源
      最近更新 更多