数据库中x值的序列

时间:2013-04-08 14:38:03

标签: mysql sql

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

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

以下是我的两个假设:

  1. resultvarchar
  2. 查询还会返回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