我试图运行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
您可以使用以下方式。我们所需要的只是计算值变化的数量,例如当前值不等于前一个值的情况。在此示例中,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因为第一个序列没有先前的值。
如果您只需要计算具有超过 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)