示例:我的查询有 200 个结果。
Result
----------
true
false
false
true
true
true
false
false
.
.
.
我可以知道我的结果中是否有一个 x "true" 的序列,使用 mysql 吗?
示例:我想知道在这个结果中我是否有 20 个“真”序列,不间断,在这 20 个“真”之间没有一个假。
谢谢!
以下是我的两个假设:
result
是一个varchar
id
将用于设置顺序的,因此我们有一个明确的顺序(如果您的原始查询已经应用了一致的顺序,那么您可能不需要订购外部查询)。以下代码将在不间断的序列中计算“真”的最大值Table1
(您需要将其应用于您的子查询):
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 。
这是 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 Fiddle:http ://sqlfiddle.com/#!2/2f706/12