MySQLDBで連勝を計算しようとしています。勝ち負けのデータを保存するために、次のテーブルを作成しました。
"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"
. . .
このデータは、12チームにわたって4年間、年間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
. . .
これは正しい/期待される出力です...1年以内に。
私の問題は何年にもわたっています。チームが2007年を3ゲーム連勝で終了し、2008年の最初の4ゲームに勝ったとします。これは合計7ゲーム連勝として記録する必要があります(損失を記録せずに7勝)。しかし、これまでのところ、何年にもわたって対応するために上記のクエリを変更する方法を理解することはできません。
年を週と連結した新しいフィールドをテーブルに作成しようとしましたが(たとえば2007.13
、2007年の第13週)、年と週を別々に使用する代わりにそのフィールドを使用しても成功しませんでした。ファンキーな結果を出しました。
ありがとうございました。