我正在尝试计算 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"
. . .
该数据跨越 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
. . .
这是正确/预期的输出......在一个给定的年份内。
我的问题跨越多年。假设一支球队在 2007 年以 3 连胜结束,然后赢得了 2008 年的前 4 场比赛。这应该记录为总共 7 连胜(7 胜不记输)。但到目前为止,我无法弄清楚如何修改上述查询以适应跨年。
我什至尝试在表中创建一个新字段,将年份与周连接(例如2007.13
,2007 年的第 13 周),但没有成功使用该字段而不是分别使用年和周。给出了时髦的结果。
谢谢你。