我試圖計算MySQL數據庫中的連勝數。我創建了下面的表來存儲輸/贏數據:在MySQL中計算連續或連續數字
"year" "team_id" "week" "result"
"2007" "1" "1" "W"
"2007" "1" "2" "L"
"2007" "1" "3" "W"
"2007" "1" "4" "W"
"2007" "1" "5" "W"
"2007" "1" "6" "W"
"2007" "1" "7" "W"
"2007" "1" "8" "W"
"2007" "1" "9" "W"
"2007" "1" "10" "L"
. . .
該數據跨越4年跨越12支球隊,每年13-16周。
要計算的連勝,我用下面的查詢:
SELECT
team_id,
result,
year,
MIN(week) as StartDate,
MAX(week) as EndDate,
COUNT(*) as Games
FROM (
SELECT
year,
week,
team_id,
result,
( SELECT
COUNT(*)
FROM
win_loss_temp wl2
WHERE
wl1.team_id = wl2.team_id
and wl2.result <> wl1.result
and wl2.year <= wl1.year
AND wl2.week <= wl1.week) as rungroup
FROM
win_loss_temp wl1) A
WHERE result = 'W'
GROUP BY year, team_id, result, rungroup
ORDER BY Games desc
LIMIT 15;
這給出了以下結果:
team_id result year StartDate EndDate Games
----------------------------------------------------------
5 W 2007 1 12 12
1 W 2007 3 9 7
5 W 2008 2 7 6
. . .
這是正確的/預期輸出......一個給定的一年內。
我的問題是跨越多年。說一支球隊在三連勝中取得了2007年的勝利,然後贏得了2008年的前四場比賽。這應該被記錄爲總共7場比賽的勝利(7場勝利沒有記錄到損失)。但到目前爲止,我無法弄清楚如何修改上述查詢以適應跨越年份。
我甚至試過在那年與周(例如2007.13
2007年的13周)級聯表創建一個新的領域,但使用該字段,而不是一年,周分別沒有成功。獲得時髦的結果。
謝謝。
哦。我在看到您發佈此消息之前發表了評論。是的,這幾乎肯定是你的問題。更好的方法是使用一個整數,而不是使用字符串和填充操作:'YEAR * 100 + WEEK'。 – eggyal
@eggyal偉大的思想家都認爲。 :)但看到我在這個答案中的最新編輯...這個問題沒有解決。 – hannebaumsaway
是的,改變你的子選擇也可以選擇concat(year,week)並從你的select和你的group中刪除year。 –