连续值分组

现有如下数据,要求得出连续得冠的起止时间

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)

你可能感兴趣的:(数据,sql,select,分析函数)