例如:我的查詢有200條結果。數據庫中x值的順序
Result
----------
true
false
false
true
true
true
false
false
.
.
.
我可以知道在我的結果中是否有一個x「真」的序列,使用mysql?
例如:我想知道在這個結果中,如果在這20個「真」之間,我有一個20「真」的序列,不停止,沒有一個假。
謝謝!
例如:我的查詢有200條結果。數據庫中x值的順序
Result
----------
true
false
false
true
true
true
false
false
.
.
.
我可以知道在我的結果中是否有一個x「真」的序列,使用mysql?
例如:我想知道在這個結果中,如果在這20個「真」之間,我有一個20「真」的序列,不停止,沒有一個假。
謝謝!
以下是我的兩個假設:
result
是varchar
id
將被用於設置的順序,所以我們有一個明確的序列(如果你的原始查詢已經應用一致的順序,那麼你可能不需要訂購外部查詢)。下面的代碼將計算的「真」的最大在不間斷的序列中Table1
(你需要將它應用到你的子查詢):
SET @n = 0;
SELECT MAX(CASE WHEN result = 'true' THEN @n:[email protected]+1 ELSE @n:=0 END) AS "Maximum Number of True"
FROM Table1
ORDER BY id;
所以,你會是否最大返回是至少20(在你的情況)。
以下是您可以試驗的SQL Fiddle。
這正是我要找的!我測試了我的查詢,它的工作原理!非常感謝! – Otuyh 2013-04-08 16:32:59
@Hor - 不客氣。 MySQL的**內聯分配**功能非常強大,可以編寫單個查詢,否則,您將需要使用「while」循環的過程。 – 2013-04-08 17:46:09
這裏的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([email protected], @rownum:[email protected]+1, @rownum:=1) AS streak, @prev:=result
FROM results,
(SELECT @prev:=NULL, @rownum:=1) vars
) sq
GROUP BY result
ORDER BY streak DESC
結果是這樣的:
這告訴你,對於一個1 = true
值你有連續3個1的序列,對於0 = false
值,您有2個連續的序列ive 0s。
SQL小提琴玩數據:http://sqlfiddle.com/#!2/2f706/12
感謝您的回覆! – Otuyh 2013-04-08 16:33:50
這個問題沒有顯示任何研究工作。 **做你的作業很重要**。告訴我們你發現了什麼,***爲什麼它不符合你的需求。這表明你已經花時間去嘗試幫助你自己了,它使我們避免重申明顯的答案,最重要的是它可以幫助你得到更具體和相關的答案。 [FAQ](http://stackoverflow.com/questions/how-to-ask)。 – Kermit 2013-04-08 14:41:21
您是否有另一列控制訂單?你可以查詢也返回一些可以用於排序的'id'字段嗎? – 2013-04-08 14:41:34
新鮮的,即時通訊真的很抱歉,如果你是冒犯我的問題。我在這裏問,因爲我甚至不知道如何搜索谷歌。我不知道是否有我想要的這個名字。 PM,我可以做到這一點,但它不會是連續的。 – Otuyh 2013-04-08 15:24:40