通过迭代 sql 跟踪"条纹"



我目前有一个查询表,目前计算基于以前的胜利和失败的人工排名。赢球的队伍记+1,输球的队伍记-1。

到目前为止,我目前已经计算了球队的最终成绩,但我想要的是跟踪连胜的起落。

这里是链接到http://sqlfiddle.com/#!2/d87d8/1SQLFIDDLE

这是我要找的:

 Team     |    Streak
 'Team A'      0
 'Team B'      0
 'Team C'      0
 'Team D'      0
 'Team A'      1
 'Team B'      -1
 'Team C'      1
 'Team D'      -1
 'Team A'      2
 'Team B'      -2
 'Team C'      0
 'Team D'      0
 'Team A'      1
 'Team B'      -3
 'Team C'      1
 'Team D'      1
<标题> 解决
SELECT teamName, (
SELECT sum(CASE matchVictory WHEN 1 then 1 else -1 end)  
FROM poolOfTeams b 
WHERE b.gameId<=temp.gameId 
AND b.teamName=temp.teamName) as Streak 
FROM temp
GROUP BY teamName, gameId
ORDER BY teamName, gameId;

使用Dwayne Towell提供的select语句,我只需要插入一个case语句

试着这样做:

SELECT gameId, teamName, (
    SELECT sum(matchVictory)  
    FROM temp b 
    WHERE b.gameId<=temp.gameId 
    AND b.teamName=temp.teamName) as Streak 
FROM temp 
GROUP BY teamName, gameId
ORDER BY gameId, teamName;

假设胜利和失败分别用1/-1表示。订单和你想要的不完全一样,但也许你可以从这里解决。

可能有一种方法可以在窗口函数中做到这一点,但是你没有

最新更新