例: クエリから 200 件の結果が得られました。
Result
----------
true
false
false
true
true
true
false
false
.
.
.
mysql を使用して、結果に x "true" のシーケンスがあるかどうかを知ることはできますか?
例: この結果で、この 20 個の「真」の間に 1 つの偽がなく、ノンストップで 20 個の「真」のシーケンスがあるかどうかを知りたいです。
ありがとう!
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
以下は私の2つの仮定です:
result
ですvarchar
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です。