【问题标题】:Get the amount of consecutive values from the end of the table从表的末尾获取连续值的数量
【发布时间】:2013-11-21 03:55:30
【问题描述】:

这个我需要帮助,我不知道怎么做。

这是我在 MySql 中的数据

----------------------
|  id  |     color   |
----------------------
|  1   |     green   |
|  2   |     red     |
|  3   |     red     |
|  4   |     black   |
|  5   |     red     |
|  6   |     black   |
|  7   |     black   |
----------------------

如何计算颜色的最后一个数据?但不是在所有行中,我只想计算最后一个数据一个接一个的时间。在这种情况下,结果应该是:

黑色连续出现2次

或

----------------------
|  id  |     color   |
----------------------
|  1   |     green   |
|  2   |     red     |
|  3   |     red     |
|  4   |     black   |
|  5   |     red     |
|  6   |     black   |
|  7   |     black   |
|  9   |     green   |
| 10   |     red     |
| 11   |     red     |
| 12   |     red     |
----------------------

这里将是:

红色连续3次

【问题讨论】:

  • 当您说last 时,您的意思是按id 订购?

标签: php mysql count row


【解决方案1】:

这似乎是用户定义变量的有效案例。无论ID 列是否具有连续值,此解决方案都将起作用:

select max(amount) amount from (
    select color,
        @found := if(@found, true, @prev_color != color),
        @prev_color := color,
        @amount := @amount + (not @found) amount
    from table, (
        select @prev_color := (select color from table order by id desc limit 1),
        @found := false,
        @amount := 0) init
    order by id desc
) s

看到它在工作here。

【讨论】:

    【解决方案2】:

    你是用mysql还是php完成?

    我不知道mysql; 但是php你可以这样做:

    通过sql“SELECT * FROM table ORDER BY ID DESC”获取所有结果:

    $count=0;$currentcolor='';
    
    $row=mysql_fetch_assoc($result);
    
    $currentcolor=$row['color'];
    
    while($row=mysql_fetch_assoc($result)){
       if($row['color']==$currentcolor){
           $count++;
       }else{
          break;
       }
    }
    

    【讨论】:

      【解决方案3】:

      这将为您提供您正在寻找的结果

      SELECT COUNT(color) FROM table GROUP BY color ORDER BY id DESC LIMIT 1; 
      

      【讨论】:

      • 其实不会。它将为 OP 问题中的第二组数据返回 6,因为您计算的是所有 red 而不是最后一个 3。
      【解决方案4】:

      我已更改查询。这应该可以解决问题

       SELECT count(`color`) FROM `table_name` GROUP BY `color` ORDER BY `id` DESC Limit 0,1
      

      【讨论】:

      • 这与 Jacob 的问题相同(实际上是相同的查询)。您只需要计算最后 3 个,就可以计算全部。需要从下往上处理,当达到与上一个不同的值时停止计数。
      猜你喜欢
      • 2021-06-05
      • 2018-02-09
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      相关资源
      最近更新 更多