連續值分組

現有如下數據,要求得出連續得冠的起止時間

SQL> select * from nba;
TEAM           Y
---------- -----
活塞        1990
公牛        1991
公牛        1992
公牛        1993
火箭        1994
火箭        1995
公牛        1996
公牛        1997
公牛        1998
馬刺        1999
湖人        2000
湖人        2001
湖人        2002
馬刺        2003
活塞        2004
馬刺        2005
熱火        2006
馬刺        2007
凱爾特人    2008
湖人        2009
湖人        2010
21 rows selected

oracle中方法如下:

SELECT team, MIN(y) AS b, MAX(y) AS e
  FROM (SELECT rownum - row_number() over(PARTITION BY team ORDER BY y) AS gp,
               team,
               y
          FROM (SELECT team, y FROM nba ORDER BY y))
 GROUP BY team, gp
 ORDER BY 2
TEAM                B          E
---------- ---------- ----------
活塞             1990       1990
公牛             1991       1993
火箭             1994       1995
公牛             1996       1998
馬刺             1999       1999
湖人             2000       2002
馬刺             2003       2003
活塞             2004       2004
馬刺             2005       2005
熱火             2006       2006
馬刺             2007       2007
凱爾特人         2008       2008
湖人             2009       2010
13 rows selected

mysql中的語句爲:

SELECT team, MIN(y) AS b, MAX(y) AS e
  FROM (SELECT team,
               y,
               @gp := IF(@team = team, @gp, @gp + 1) AS gp,
               @team := team
          FROM nba, (SELECT @gp := 0, @team := '') b
         ORDER BY y)c
 GROUP BY team, gp
 ORDER BY 2;
+----------+------+------+
| team     | b    | e    |
+----------+------+------+
| 活塞     | 1990 | 1990 |
| 公牛     | 1991 | 1993 |
| 火箭     | 1994 | 1995 |
| 公牛     | 1996 | 1998 |
| 馬刺     | 1999 | 1999 |
| 湖人     | 2000 | 2002 |
| 馬刺     | 2003 | 2003 |
| 活塞     | 2004 | 2004 |
| 馬刺     | 2005 | 2005 |
| 熱火     | 2006 | 2006 |
| 馬刺     | 2007 | 2007 |
| 凱爾特人 | 2008 | 2008 |
| 湖人     | 2009 | 2010 |
+----------+------+------+
13 rows in set (0.01 sec)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章