关于一个NBA冠军的SQL查询问题,解决方法很巧妙

下表记录了夺冠球队的名称及年份:

TEAMY
活塞1990
公牛1991
公牛1992
公牛1993
火箭1994
火箭1995
公牛1996
公牛1997
公牛1998
马刺1999
湖人2000
湖人2001
湖人2002
马刺2003
活塞2004
马刺2005
热火2006
马刺2007
凯尔特人2008
湖人2009
湖人2010

请写出一条 SQL 语句,查询出在此期间连续获得冠军的有哪些,其连续的年份的起止时间是多少?

结果如下:

TEAMBE
公牛19911993
火箭19941995
公牛19961998
湖人20002002
湖人20092010
# 创建表
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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值