下表记录了夺冠球队的名称及年份:
TEAM | Y |
---|
活塞 | 1990 |
公牛 | 1991 |
公牛 | 1992 |
公牛 | 1993 |
火箭 | 1994 |
火箭 | 1995 |
公牛 | 1996 |
公牛 | 1997 |
公牛 | 1998 |
马刺 | 1999 |
湖人 | 2000 |
湖人 | 2001 |
湖人 | 2002 |
马刺 | 2003 |
活塞 | 2004 |
马刺 | 2005 |
热火 | 2006 |
马刺 | 2007 |
凯尔特人 | 2008 |
湖人 | 2009 |
湖人 | 2010 |
请写出一条 SQL 语句,查询出在此期间连续获得冠军的有哪些,其连续的年份的起止时间是多少?
结果如下:
TEAM | B | E |
---|
公牛 | 1991 | 1993 |
火箭 | 1994 | 1995 |
公牛 | 1996 | 1998 |
湖人 | 2000 | 2002 |
湖人 | 2009 | 2010 |
# 创建表
create table if not exists nba(
team VARCHAR(10),
y int(4)
);
# 插入数据
insert into nba(team,y) values
('活塞',1990),
('公牛',1991),
('公牛',1992),
('公牛',1993),
('火箭',1994),
('火箭',1995),
('公牛',1996),
('公牛',1997),
('公牛',1998),
('马刺',1999),
('湖人',2000),
('湖人',2001),
('湖人',2002),
('马刺',2003),
('活塞',2004),
('马刺',2005),
('热火',2006),
('马刺',2007),
('凯尔特人',2008),
('湖人',2009),
('湖人',2010);
# 查询sql
SELECT @ROWNUM:=@ROWNUM+1 AS ROWNUM, MAX(nn.team) team,MIN(nn.y) B,MAX(nn.y)+1 E
FROM(SELECT @ROWNUM:=@ROWNUM+1,n2.team,n2.y,@ROWNUM,n2.y-@ROWNUM
FROM (SELECT * FROM nba) n1
INNER JOIN
(SELECT * FROM nba) n2
ON n1.team=n2.team,
(select @ROWNUM:=0) t
WHERE n1.y=n2.y+1
) nn, (select @ROWNUM:=0) tt
GROUP BY (nn.y-@ROWNUM)
ORDER BY B;