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;
执行结果:

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








暂无数据