2013-07-24 53 views
0

我有這個表:在連續行的行選擇MySQL的最大數量

player_id goals date 
1   0  16/06 
1   1  17/06 
1   4  18/06 
1   1  19/06 
1   0  20/06 

我需要的是獲得連續的比賽中球員得分1至少一個目標的數量。

在這個例子中,查詢的結果應該是這樣的:

player_id num_continuous_days 
1   3 

行的順序是日期列。是否有可能在MySQL中實現這一點?

我使用HQL和HQL進行查詢,如果可以使用HQL(我懷疑它)完成了獎勵積分。如果沒有其他解決方法,我願意使用存儲過程,並將java編程邏輯作爲最後一項措施。

+0

這個鏈接看起來像它可能爲你工作。我會把它作爲答案,但我從來沒有嘗試過,並且由於時間限制無法使其與當前問題相匹配。祝你好運。 http://www.artfulsoftware.com/infotree/qrytip.php?id=803 – JClaspill

+0

你可以在這裏找到一些幫助:http://stackoverflow.com/questions/13456857/selecting-continuous-block-of-records-in -mysql –

+0

如果玩家在給定的時間段內有多個連續的匹配,那麼您希望的輸出是什麼? – peterm

回答

1

嘗試

SELECT player_id, COUNT(*) num_continuous_days 
    FROM 
(
    SELECT player_id, goals, date, IF(goals = 0, @n := @n + 1, @n) g 
    FROM Table1, (SELECT @n := 0) n 
    ORDER BY player_id, date 
) q 
WHERE goals > 0 
GROUP BY player_id, g 

輸出:

 
| PLAYER_ID | NUM_CONTINUOUS_DAYS | 
----------------------------------- 
|   1 |     3 | 

這裏是SQLFiddle演示

+0

爲了只獲得最大天數,我重新做了一點。完美的作品!謝謝 ! – user2593577

+0

@ user2593577太好了。你非常歡迎:) – peterm