热线电话:13121318867

登录
2020-06-16 阅读量: 2539
MySQL面试题:查找出连续3天以及以上人流量大于100的日期

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

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

输出结果:

来源:力扣网

官方解答:在表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;

执行结果:

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

28.6203
3
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子