2013-04-08 49 views
0

例如:我的查詢有200條結果。數據庫中x值的順序

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

我可以知道在我的結果中是否有一個x「真」的序列,使用mysql?

例如:我想知道在這個結果中,如果在這20個「真」之間,我有一個20「真」的序列,不停止,沒有一個假。

謝謝!

+2

這個問題沒有顯示任何研究工作。 **做你的作業很重要**。告訴我們你發現了什麼,***爲什麼它不符合你的需求。這表明你已經花時間去嘗試幫助你自己了,它使我們避免重申明顯的答案,最重要的是它可以幫助你得到更具體和相關的答案。 [FAQ](http://stackoverflow.com/questions/how-to-ask)。 – Kermit 2013-04-08 14:41:21

+2

您是否有另一列控制訂單?你可以查詢也返回一些可以用於排序的'id'字段嗎? – 2013-04-08 14:41:34

+0

新鮮的,即時通訊真的很抱歉,如果你是冒犯我的問題。我在這裏問,因爲我甚至不知道如何搜索谷歌。我不知道是否有我想要的這個名字。 PM,我可以做到這一點,但它不會是連續的。 – Otuyh 2013-04-08 15:24:40

回答

1

以下是我的兩個假設:

  1. resultvarchar
  2. 查詢還返回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

+0

這正是我要找的!我測試了我的查詢,它的工作原理!非常感謝! – Otuyh 2013-04-08 16:32:59

+0

@Hor - 不客氣。 MySQL的**內聯分配**功能非常強大,可以編寫單個查詢,否則,您將需要使用「while」循環的過程。 – 2013-04-08 17:46:09

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([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

+0

感謝您的回覆! – Otuyh 2013-04-08 16:33:50