单语句SQL查询(nba连续夺冠、用户连续登录)解决思路

本文通过举例说明如何使用单语句SQL查询NBA球队连续夺冠的年份及其起止时间,以及如何应用类似思路解决用户连续登录问题。关键在于计算连续夺冠/登录的记录数,借助辅助列进行比较并筛选符合条件的连续记录。

用一个例子做为讲解:查询NBA球队在此期间连续获得冠军的有哪些,其连续的年份的起止时间是多少?

查询结果如下:

# 创建表
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);

解决思路是首先计算出各队每年连续夺冠的记录数con_col,其次是增加一列递增数作为辅助列help_col;help_col - con_col得到数相同就是连续夺冠的记录;再对help_col - con_col进行分组并过滤掉记录数小于1(不满足连续夺冠条件)。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值