2014-07-21 39 views
0

我目前有一个查询表,目前计算基于以前的胜利和损失人为排名。对于一个球队来说,一个球队被记入+1,而一个球队的损失则为-1。通过迭代跟踪“条纹”sql

截至目前为止,我现在已经确定了球队的最终数据,但是我期待的是追踪连胜的上升和下降。

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

这里就是我要找:

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; 

使用由德韦恩Towell提供的select语句,我只必须插入一个案例陈述。

+0

我想你应该有一个额外的列,将它们组合在一起,否则没有逻辑分组。例如,为什么要在第一条记录中同时计算游戏ID 1和2,而不是2和3。 –

+0

它可以按teamName分组。所以这会是A队0,A队1,A队2,A队1等 – TaylorM

+1

解释清楚你的桌面很困惑。 – Sathish

回答

1

试试沿着这些线路:

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表示。顺序并不完全如你所愿,但也许你可以从这里解决。

有可能是一个方法有窗函数来做到这一点,但你没有

+0

我改变了你的代码,使它在orignal中工作和编辑。我会给你解决方案。谢谢。一世 – TaylorM