Mysql计算匹配的连续行

dgi*_*bbs 5 mysql count

我试图运行MySQL查询但不太确定如何做到这一点.我想计算匹配的连续行数.例如

A A A B B B B A A
Run Code Online (Sandbox Code Playgroud)

我希望结果是3

很容易计算总数,A但我不确定只出3最新.

以下是我如何列出所有内容的示例

SELECT email,subject FROM tablename where email='test@example.com' and subject='FAIL';
Run Code Online (Sandbox Code Playgroud)

编辑:以下是一些可能有用的示例数据.为简单起见,我们将只有ID和主题和订单ID

ID Subject
1 FAIL
2 FAIL
3 FAIL
4 PASS
5 PASS
6 FAIL
7 PASS
8 FAIL
9 FAIL
Run Code Online (Sandbox Code Playgroud)

结果应为3或2,具体取决于您的订购方式 ID

val*_*lex 2

您可以使用以下方式。我们所需要的只是计算值变化的数量,例如当前值不等于前一个值的情况。在此示例中,ID 是订单字段,它可以是 id、日期……

select count(*)+1
FROM T T1
where val<>(select val from T where T.id<T1.id order by id desc LIMIT 1)
Run Code Online (Sandbox Code Playgroud)

count(*)+1因为第一个序列没有先前的值。

SQLFiddle 演示

如果您只需要计算具有超过 1 个值的序列,则可以使用以下语句。这HAVING count(*)>1意味着我们只需要行中 2 个或更多值的序列。如果您需要 3 个或更多,则将其更改为HAVING count(*)>2依此类推。

select 
  count(*) 
FROM 
  (
    select 
      Val, 
      Grp 
    from 
      (
        select 
          T1.id, 
          T1.val, 
          (
            select 
              max(id) 
            from 
              T 
            where 
              T.id < T1.id 
              and T.val <> T1.Val
          ) as Grp 
        FROM 
          T T1
      ) T1 
    group by 
      GRP 
    HAVING 
      count(*)> 1
  ) T3
Run Code Online (Sandbox Code Playgroud)

SQLFiddle 演示