2014-01-26 26 views
0

我需要爲特定的運動隊獲得勝利或失敗的順序。例如:寫mySQL得到一個序列

表:結果

teamid win eventdate 
====== === ========= 
1   0 26/01/2014 
1   0 25/01/2014 
2   1 26/01/2014 
1   0 24/01/2014 
1   1 21/01/2014 

它應該返回teamid 1已經失去了3的序列。但是,如何在SQL中可以做到這一點?

+0

那麼,如果球隊1具有3負的序列,其次是4勝,其次是2負;第二隊有7勝8負?你會期待什麼結果? – eggyal

+0

應該由eventdate命令DESC – Yannick

+0

這並不回答問題。完全一樣。 – eggyal

回答

1

MySQL不支持解析函數,但是計數順序勝/損失的一種方式是經由user variables

SELECT @seq := IF(@teamid<=>teamid AND @win<=>win,@seq,0)+1 seq, 
     @teamid := teamid teamid, 
     @win := win win 
FROM  RESULTS, (SELECT @teamid:=NULL, @win:=NULL) init 
ORDER BY teamid, STR_TO_DATE(eventdate, '%d/%m/%Y') 

該查詢可以被用作用於執行進一步分析的基礎。例如,通過團隊取得最長的條紋(包括勝負):

SELECT teamid, win, MAX(seq) FROM (
    SELECT @seq := IF(@teamid<=>teamid AND @win<=>win,@seq,0)+1 seq, 
      @teamid := teamid teamid, 
      @win := win win 
    FROM  RESULTS, (SELECT @teamid:=NULL, @win:=NULL) init 
    ORDER BY teamid, STR_TO_DATE(eventdate, '%d/%m/%Y') 
) t GROUP BY teamid, win