2011-05-09 45 views
3

我已經成功地使這個工作,但需要幫助改善查詢並優化它獲取更多的參數。計算最長連勝/連敗的用戶

查詢將計算出的最長連勝輸贏的遊戲,到目前爲止,我已經成功地使這種通過獲取勝利的工作,失去作爲單獨的查詢的。但我想一次拿到他們。我怎麼能作出這樣的工作,進一步建立在此查詢(此人會計算最長連勝):

SELECT MIN(c.ID) - a.ID + 1 as Streak 
    FROM games AS a 
    LEFT JOIN games AS b ON a.ID = b.id + 1 AND b.P1Outcome= 'win' 
    LEFT JOIN games AS c ON a.ID <= c.id AND c.P1Outcome= 'win' 
    LEFT JOIN games AS d ON c.ID = d.id - 1 AND d.P1Outcome= 'win' 
    WHERE 
     a.UsrID = x 
     AND a.P1Outcome= 'win' 
     AND b.ID IS NULL 
     AND c.ID IS NOT NULL 
     AND d.ID IS NULL 
    GROUP BY a.ID 
    ORDER BY Streak 

ID =每場比賽

P1Outcome主鍵=上的用戶結果遊戲

UsrID =該用戶ID

首先,不可能有任何改進,如果可能的話可以把它也同時獲取失去連勝?感謝您的時間。

+0

創建表和樣本數據將有助於...我不認爲這個查詢應該工作 - b.ID爲null並且d.ID是無效條款應引起它炸燬,和你沒有參加上任何地方UsrID .. – 2011-05-09 11:13:49

+1

你也許可以使用用戶變量來這更有效地完成。見http://stackoverflow.com/questions/3755590/sql-how-to-select-the-record-with-the-most-recent-past-date-for-every-record-on/3755688#3755688(@ !安德烈 - 幾秒打我類似的評論那裏) – 2011-05-09 12:16:50

+0

@馬丁:哈哈,當我和我的英語掙扎,你把你的時間更有效率,並最終能夠拿出更多的東西比物質感嘆我。謝謝,我現在可以刪除我的幫助中的悲慘嘗試。 :) – 2011-05-09 12:28:28

回答

2

我意識到這個問題是有點老了,雖然不是完全的MySQL中,例如,從這裏走路都非常好,回答了我關於如何做到這一點很好,所以我在分享救人搜索的希望問題對於一個完整的答案一段時間:

http://www.sqlteam.com/article/detecting-runs-or-streaks-in-your-data

+0

很好的答案。此問題的一個很好的答案:http://stackoverflow.com/questions/8468133/sql-calculate-winning-and-losing-streaks – djskinner 2012-08-23 15:42:51