2014-07-21 77 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