【发布时间】:2012-05-31 19:33:38
【问题描述】:
我正在尝试计算 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 周),但使用该字段而不是单独使用年份和星期没有成功。给出了时髦的结果。
谢谢。
【问题讨论】:
标签: mysql