MySQL中连续出现多次的问题

找出所有至少连续出现三次的数字。

Create table If Not Exists Logs (id int, num int)
Truncate table Logs
insert into Logs (id, num) values ('1', '1')
insert into Logs (id, num) values ('2', '1')
insert into Logs (id, num) values ('3', '1')
insert into Logs (id, num) values ('4', '2')
insert into Logs (id, num) values ('5', '1')
insert into Logs (id, num) values ('6', '2')
insert into Logs (id, num) values ('7', '2')

 

 

1、多张表相连

select distinct s1.num as 'ConsecutiveNums'
from Logs  as s1,Logs as s2,Logs as s3
where s1.id=s2.id+1 and s2.id=s3.id +1
and s1.num=s2.num and s2.num=s3.num 

2、窗口函数

select distinct num as 'ConsecutiveNums'
from (
  select num
,lead(num,1) over() as 'num1'
,lead(num,2) over() as 'num2'
from Logs
) as s1
where num=num1 and num1 =num2
函数功能
lag(字段名,N,默认值) over(partition by …order by …)向下窗口函数lead:取出字段名所在的列,向下N行的数据,作为独立的列
lead(字段名,N,默认值) over(partition by …order by …)向上窗口函数lag:取出字段名所在的列,向上N行的数据,作为独立的

每行的人数大于或等于 100 且 id 连续的三行或更多行记录。

Create table If Not Exists Stadium (id int, visit_date DATE NULL, people int)
Truncate table Stadium
insert into Stadium (id, visit_date, people) values ('1', '2017-01-01', '10')
insert into Stadium (id, visit_date, people) values ('2', '2017-01-02', '109')
insert into Stadium (id, visit_date, people) values ('3', '2017-01-03', '150')
insert into Stadium (id, visit_date, people) values ('4', '2017-01-04', '99')
insert into Stadium (id, visit_date, people) values ('5', '2017-01-05', '145')
insert into Stadium (id, visit_date, people) values ('6', '2017-01-06', '1455')
insert into Stadium (id, visit_date, people) values ('7', '2017-01-07', '199')
insert into Stadium (id, visit_date, people) values ('8', '2017-01-09', '188')

 

 

with t1 as(
    select *,id - row_number() over(order by id) as rk
    from stadium
    where people >= 100
)
select id,visit_date,people
from t1
where rk in(
    select rk
    from t1
    group by rk
    having count(rk) >= 3
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值