示例:我的查询有200个结果。
Result
----------
true
false
false
true
true
true
false
false
.
.
.
我可以使用mysql知道我的结果中是否有一个x“true”的序列?
示例:我想知道在这个结果中我是否有一个20“真”的序列,不停,在这20个“真”之间没有一个假。
谢谢!
答案 0 :(得分:1)
以下是我的两个假设:
result
是varchar
id
,它将用于设置顺序,因此我们有一个明确的序列(如果您的原始查询已经应用了一致的顺序,那么您可能不需要订购外部查询)。 / LI>
醇>
以下代码将计算Table1
中不间断序列中最大的“true”(您需要将其应用于子查询):
SET @n = 0;
SELECT MAX(CASE WHEN result = 'true' THEN @n:=@n+1 ELSE @n:=0 END ) AS "Maximum Number of True"
FROM Table1
ORDER BY id;
因此,您将看到返回的最大值是否至少为20 (在您的情况下)。
您可以试用SQL Fiddle。
答案 1 :(得分:1)
这是SQL数据:
create table results
(
result bool not null
);
insert into results values (1);
insert into results values (0);
insert into results values (0);
insert into results values (1);
insert into results values (1);
insert into results values (1);
insert into results values (0);
insert into results values (0);
以下是查询:
SELECT result, MAX(streak)
FROM (
SELECT result,
IF(result=@prev, @rownum:=@rownum+1, @rownum:=1) AS streak, @prev:=result
FROM results,
(SELECT @prev:=NULL, @rownum:=1) vars
) sq
GROUP BY result
ORDER BY streak DESC
结果如下:
1 3
0 2
这告诉您,对于1 = true
值,您有3个连续1的序列,而对于0 = false
值,您有2个连续0的序列。
使用数据的SQL小提琴:http://sqlfiddle.com/#!2/2f706/12