0

例: クエリから 200 件の結果が得られました。

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

mysql を使用して、結果に x "true" のシーケンスがあるかどうかを知ることはできますか?

例: この結果で、この 20 個の「真」の間に 1 つの偽がなく、ノンストップで 20 個の「真」のシーケンスがあるかどうかを知りたいです。

ありがとう!

4

2 に答える 2

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 に答える
1

以下は私の2つの仮定です:

  1. resultですvarchar
  2. idクエリはまた、順序を設定するために使用されるものを返すため、明確なシーケンスが得られます (元のクエリがすでに一貫した順序を適用している場合は、外側のクエリを並べ替える必要はありません)。

次のコードは、中断のないシーケンスで「true」の最大値を計算し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 に答える