连续值分组

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

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)