2017-04-10 48 views
3
SELECT team1, score1, score2, team2, gameDate 
FROM GAMES 
WHERE team1 = 'Tottenham Hotspur' 
    OR team2 = 'Tottenham Hotspur' 
ORDER BY gameDate ASC; 

該查詢返回遊戲結果和比賽日期(「托特納姆熱刺」)的比賽日期排序。如何查找最長的連續結果集?

team1    score1 score2 team2      gameDate 
+-------------------------------------------------------------------------+ 
Tottenham Hotspur  0  0  Manchester City   2010-08-14 
Stoke City    1  2  Tottenham Hotspur   2010-08-21 
Tottenham Hotspur  0  1  Wigan Athletic   2010-08-28 
West Bromwich Albion 1  1  Tottenham Hotspur   2010-09-11 
Tottenham Hotspur  3  1  Wolverhampton Wanderers 2010-09-18 
West Ham United  1  0  Tottenham Hotspur   2010-09-25 
Tottenham Hotspur  2  1  Aston Villa    2010-10-02 
Fulham     1  2  Tottenham Hotspur   2010-10-16 
Tottenham Hotspur  1  1  Everton     2010-10-23 
Manchester United  2  0  Tottenham Hotspur   2010-10-30 
Bolton Wanderers  4  2  Tottenham Hotspur   2010-11-06 
Tottenham Hotspur  1  1  Sunderland    2010-11-09 

如何在這裏找到最長的連續贏/輸結果集?

在上面的例子中,最高連續4個遊戲(遊戲按日期排序)沒有平局的結果,我們要過濾這些遊戲

team1    score1 score2 team2      gameDate 
+-------------------------------------------------------------------------+ 
Tottenham Hotspur  3  1  Wolverhampton Wanderers 2010-09-18 
West Ham United  1  0  Tottenham Hotspur   2010-09-25 
Tottenham Hotspur  2  1  Aston Villa    2010-10-02 
Fulham     1  2  Tottenham Hotspur   2010-10-16 
+0

如果有多件最長的非抽獎遊戲怎麼辦? (4非抽獎遊戲,然後再抽4次非抽獎遊戲)。你想在這種情況下得到什麼結果? –

+0

然後只是一塊。更好的方式是最後一個 – Constante

回答

4

嘗試這個:

SELECT tttt.* from (
    SELECT ttt.*, RANK() over(order by res desc, seqcnt desc , grp desc) rnk from (
     SELECT tt.*, count(*) over(partition by grp, res) as seqcnt from (
      SELECT t.*, ROW_NUMBER() over(order by gameDate) - ROW_NUMBER() over(partition by res order by gameDate) as grp from (
       SELECT team1, score1, score2, team2, gameDate, case when score1= score2 then 'D' else 'N' end as res 
       FROM GAMES WHERE team1 = 'Tottenham Hotspur' OR team2 = 'Tottenham Hotspur' 
      ) t 
     ) tt 
    ) ttt 
) tttt WHERE rnk = 1 order by gameDate 
+0

謝謝你,就像一個魅力 – Constante

0

你可以嘗試

SELECT team1, score1, score2, team2, gameDate 
FROM GAMES 
WHERE team1 = 'Tottenham Hotspur' 
    OR team2 = 'Tottenham Hotspur' 
and score1<>score2 
ORDER BY gameDate ASC 
+0

這將返回每贏/輸的遊戲...... – Constante