0

示例:我的查询有 200 个结果。

Result
----------    
true
false
false
true
true
true
false
false
.
.
.

我可以知道我的结果中是否有一个 x "true" 的序列,使用 mysql 吗?

示例:我想知道在这个结果中我是否有 20 个“真”序列,不间断,在这 20 个“真”之间没有一个假。

谢谢!

4

2 回答 2

1

以下是我的两个假设:

  1. result是一个varchar
  2. 该查询还返回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 。

于 2013-04-08T15:31:04.503 回答
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 Fiddle:http ://sqlfiddle.com/#!2/2f706/12

于 2013-04-08T15:48:02.143 回答