2015-08-15 70 views
0

我需要知道一個團隊連續贏了多少個日期(value1> value2),並知道第一個和最後一個匹配獲勝的日期。並以韓元和日期顯示10個範圍的順序列表。 我知道它不容易。它對我來說並不容易..我嘗試做一些查詢和子查詢,但沒有好的結果。由於 我有一個表Mysql - 計算日期連續條件並獲得範圍列表

  CREATE TABLE `games` (
       `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
       `value1` int(11) NOT NULL, 
       `value2` int(11) NOT NULL, 
       `played` date NOT NULL, 
       PRIMARY KEY (`id`), 
       KEY `played` (`played`) 
      ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; 

      insert into games (value1, value2, played) 
      values 
      ("2", "3", "1943-05-09"), 
      ("4", "3", "1943-08-15"), 
      ("1", "8", "1943-08-22"), 
      ("0", "4", "1943-08-29"), 
      ("1", "0", "1943-09-12"), 
      ("1", "3", "1943-09-26"), 
      ("6", "1", "1943-10-03"), 
      ("3", "2", "1943-10-10"), 
      ("3", "3", "1944-07-16"), 
      ("1", "1", "1944-08-06"), 
      ("4", "1", "1944-09-24"), 
      ("0", "7", "1944-10-08"), 
      ("0", "1", "1945-05-13"), // 1 
      ("4", "2", "1945-11-04"), // 2 
      ("3", "2", "1946-05-12"), // 3 second 3 consecutives win 
      ("4", "2", "1946-11-17"), 
      ("2", "2", "1946-11-24"), 
      ("1", "5", "1946-12-01"), 
      ("1", "0", "1947-05-18"), 
      ("3", "0", "1947-10-05"), 
      ("2", "3", "1948-11-07"), 
      ("0", "1", "1948-11-14"), 
      ("1", "4", "1948-11-21"), 
      ("3", "1", "1949-06-12"), // 1 
      ("4", "0", "1949-06-19"), // 2 
      ("5", "1", "1949-07-24"), // 3 
      ("3", "1", "1949-08-06") // 4 first consecutives win 

我需要的結果是這樣

  From   To   games_won 

      1949-06-12 1949-08-06   4 
      1945-11-04 1946-11-17   3 
      1943-10-03 1943-10-10   2 
      ... 

...

回答

2

你可以指望贏的數量和使用變量的行數。連續勝利的差異是不變的。這給你一個聚合的價值,以得到最終結果:

select min(played), max(played), count(*) 
from (select g.*, 
      (@rn := @rn + 1) as rn, 
      (@rnw := if(value1 > value2, @rnw + 1, @rnw) as rnw 
     from games g cross join 
      (select @rn := 0, @rnw := 0) params 
     order by played 
    ) g 
where value1 > value2 
group by (rn - rnw); 
+0

Gordon Linoff,作品完美.. !!!你很棒..!! :) 謝謝..!! – Diego

+0

Gordon Linoff, 我在第4行添加了a) (@rnw:= if(value1> value2,@rnw + 1,@rnw))作爲rww 並且將最後一行的訂單和限制添加到 組中rn - rnw)以count(*)desc命令,播放ASC限制10; 再次感謝。 – Diego