mysql查询近100期_MySQL面试题:查找出连续3天以及以上人流量大于100的日期

X 市建了一个新的体育馆,每日人流量信息被记录在这三列信息中:序号 (id)、日期 (visit_date)、 人流量 (people)。

请编写一个查询语句,找出人流量的高峰期。高峰期时,至少连续三行记录中的人流量不少于100。

upload_83e9a1b16f0a8047e47b6f10d1b63fa1.png

输出结果:

upload_9c4cd620e56a120ca0a88b819aab61c7.png

来源:力扣网

官方解答:在表stadium中查询人流量超过 100 的记录,将查询结果与其自身的临时表连接,再使用WHERE子句获得满足条件的记录

select distinct t1.*

from stadium t1, stadium t2, stadium t3

where t1.people >= 100 and t2.people >= 100 and t3.people >= 100

and

(

(t1.id - t2.id = 1 and t1.id - t3.id = 2 and t2.id - t3.id =1) -- t1, t2, t3

or

(t2.id - t1.id = 1 and t2.id - t3.id = 2 and t1.id - t3.id =1) -- t2, t1, t3

or

(t3.id - t2.id = 1 and t2.id - t1.id =1 and t3.id - t1.id = 2) -- t3, t2, t1

)

order by t1.id

下面是我自己的写法,如果小伙伴们有更好的写法,欢迎大家留言~~

select min(visitdate) 开始时间,max(visitdate) 结束时间,count(id) 持续天数,sum(people) 人流量 from (select *,row_number() over(order by visitdate asc) 排名 from stadium where people>100) t

group by visitdate-排名

having 持续天数>=3;

执行结果:

upload_33982bc3dee18be1cadb41138aa28ba1.png

这样结果看起来是不是更加清楚呢~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值