当前位置: 首页 > news >正文

做旅游的网站湖南网站推广

做旅游的网站,湖南网站推广,各类大型网站建设,微官网和微网站有什么区别目录 1 题目2 建表语句3 题解 1 题目 已知有表记录了每个大厅的活动开始日期和结束日期,每个大厅可以有多个活动。请编写一个SQL查询合并在同一个大厅举行的所有重叠的活动,如果两个活动至少有一天相同,那他们就是重叠的,请将他们…

目录

  • 1 题目
  • 2 建表语句
  • 3 题解

1 题目


已知有表记录了每个大厅的活动开始日期和结束日期,每个大厅可以有多个活动。请编写一个SQL查询合并在同一个大厅举行的所有重叠的活动,如果两个活动至少有一天相同,那他们就是重叠的,请将他们的交叉的日期合并。

+----------+-------------+-------------+
| hall_id  | start_date  |  end_date   |
+----------+-------------+-------------+
| 1        | 2023-01-13  | 2023-01-14  |
| 1        | 2023-01-14  | 2023-01-17  |
| 1        | 2023-01-18  | 2023-01-25  |
| 2        | 2022-12-09  | 2022-12-23  |
| 2        | 2022-12-13  | 2022-12-17  |
| 3        | 2022-12-01  | 2023-01-30  |
+----------+-------------+-------------+

结果如下:

+----------+-------------+-------------+
| hall_id  | start_date  |  end_date   |
+----------+-------------+-------------+
| 1        | 2023-01-13  | 2023-01-17  |
| 1        | 2023-01-18  | 2023-01-25  |
| 2        | 2022-12-09  | 2022-12-23  |
| 3        | 2022-12-01  | 2023-01-30  |
+----------+-------------+-------------+

解释:两个活动["2823-01-13","2023-01-14"][“2023-01-14","2023-01-17"]重叠,我们将它们合并到一个活动中[“2023-01-13","2023-01-17"]["2023-01-18","2023-01-25"]不与任何其他活动重叠,所以我们保持原样。

2 建表语句


--建表语句
CREATE TABLE IF NOT EXISTS t_hall_event (hall_id STRING, --大厅IDstart_date STRING, -- 营销活动开始日期end_date STRING -- 营销活动结束日期
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS ORC;
--数据插入
insert into t_hall_event(hall_id, start_date, end_date) values
('1','2023-01-13','2023-01-14'),
('1','2023-01-14','2023-01-17'),
('1','2023-01-18','2023-01-25'),
('2','2022-12-09','2022-12-23'),
('2','2022-12-13','2022-12-17'),
('3','2022-12-01','2023-01-30');

3 题解


我们首先按照 hall_id 分组,根据 start_dateend_date 升序排列,按照start_date 进行了升序排列,所以当前行的start_date一定晚于前一行的start_date,我们只需要对当前行的start_date 和上一行的end_date进行比较,如果当前行的start_date 小于等于前一行的end_date 代表有交叉,可以合并,否则代表不可合并。判断出是否可以合并之后,具体操作合并就转化成类似连续问题了。

第一步:先使用 lag() 函数进行开窗,取到上一行的 end_date

selecthall_id,start_date,end_date,lag(end_date) over (partition by hall_id order by start_date,end_date) as last_end_date
from t_hall_event

结果如下:

+----------+-------------+-------------+----------------+
| hall_id  | start_date  |  end_date   | last_end_date  |
+----------+-------------+-------------+----------------+
| 1        | 2023-01-13  | 2023-01-14  | NULL           |
| 1        | 2023-01-14  | 2023-01-17  | 2023-01-14     |
| 1        | 2023-01-18  | 2023-01-25  | 2023-01-17     |
| 2        | 2022-12-09  | 2022-12-23  | NULL           |
| 2        | 2022-12-13  | 2022-12-17  | 2022-12-23     |
| 3        | 2022-12-01  | 2023-01-30  | NULL           |
+----------+-------------+-------------+----------------+

第二步:根据当前行的 start_day 与上一行的 end_day 进行比较,得出是否可以合并标记;

select hall_id,start_date,end_date,last_end_date,if(start_date <= last_end_date, 0, 1) as is_merge --0:合并,1:不合并
from (select hall_id,start_date,end_date,lag(end_date) over (partition by hall_id order by start_date asc,end_date asc) as last_end_datefrom t_hall_event) t

结果如下:

+----------+-------------+-------------+----------------+-----------+
| hall_id  | start_date  |  end_date   | last_end_date  | is_merge  |
+----------+-------------+-------------+----------------+-----------+
| 1        | 2023-01-13  | 2023-01-14  | NULL           | 1         |
| 1        | 2023-01-14  | 2023-01-17  | 2023-01-14     | 0         |
| 1        | 2023-01-18  | 2023-01-25  | 2023-01-17     | 1         |
| 2        | 2022-12-09  | 2022-12-23  | NULL           | 1         |
| 2        | 2022-12-13  | 2022-12-17  | 2022-12-23     | 0         |
| 3        | 2022-12-01  | 2023-01-30  | NULL           | 1         |
+----------+-------------+-------------+----------------+-----------+

第三步:连续问题,使用 sum() over() 进行分组;

selecthall_id,start_date,end_date,last_end_date,is_merge,sum(is_merge)over(partition by hall_id order by start_date asc,end_date asc) as group_idfrom(selecthall_id,start_date,end_date,last_end_date,if(start_date<=last_end_date,0,1) as is_merge --0:合并,1:不合并from(selecthall_id,start_date,end_date,lag(end_date)over(partition by hall_id order by start_date asc,end_date asc) as last_end_datefrom t_hall_event)t) tt

结果如下:

+----------+-------------+-------------+----------------+-----------+-----------+
| hall_id  | start_date  |  end_date   | last_end_date  | is_merge  | group_id  |
+----------+-------------+-------------+----------------+-----------+-----------+
| 1        | 2023-01-13  | 2023-01-14  | NULL           | 1         | 1         |
| 1        | 2023-01-14  | 2023-01-17  | 2023-01-14     | 0         | 1         |
| 1        | 2023-01-18  | 2023-01-25  | 2023-01-17     | 1         | 2         |
| 2        | 2022-12-09  | 2022-12-23  | NULL           | 1         | 1         |
| 2        | 2022-12-13  | 2022-12-17  | 2022-12-23     | 0         | 1         |
| 3        | 2022-12-01  | 2023-01-30  | NULL           | 1         | 1         |
+----------+-------------+-------------+----------------+-----------+-----------+

第四步:取每个组内的 start_day 的最小值作为活动开始日期,end_day 的最大值作为活动结束日期,得到最终结果。注意分组条件为 hall_id+group_id

selecthall_id,min(start_date) as start_date,max(end_date) as end_datefrom(selecthall_id,start_date,end_date,last_end_date,is_merge,sum(is_merge)over(partition by hall_id order by start_date asc,end_date asc) as group_idfrom(selecthall_id,start_date,end_date,last_end_date,if(start_date<=last_end_date,0,1) as is_merge --0:合并,1:不合并from(selecthall_id,start_date,end_date,lag(end_date)over(partition by hall_id order by start_date asc,end_date asc) as last_end_datefrom t_hall_event)t) tt) tttgroup by hall_id,group_id --注意这里的分组,有group_id

结果如下:

+----------+-------------+-------------+
| hall_id  | start_date  |  end_date   |
+----------+-------------+-------------+
| 1        | 2023-01-13  | 2023-01-17  |
| 1        | 2023-01-18  | 2023-01-25  |
| 2        | 2022-12-09  | 2022-12-23  |
| 3        | 2022-12-01  | 2023-01-30  |
+----------+-------------+-------------+

文章转载自:
http://bilboa.Lbqt.cn
http://microwave.Lbqt.cn
http://animateur.Lbqt.cn
http://unperfect.Lbqt.cn
http://flasket.Lbqt.cn
http://cineangiogram.Lbqt.cn
http://guisard.Lbqt.cn
http://tinnitus.Lbqt.cn
http://hydrogenium.Lbqt.cn
http://excite.Lbqt.cn
http://pericynthion.Lbqt.cn
http://haematuria.Lbqt.cn
http://hemiopia.Lbqt.cn
http://leadswinging.Lbqt.cn
http://bento.Lbqt.cn
http://nahua.Lbqt.cn
http://enneastylos.Lbqt.cn
http://trddition.Lbqt.cn
http://chromatin.Lbqt.cn
http://hecatonstylon.Lbqt.cn
http://naevus.Lbqt.cn
http://desmosome.Lbqt.cn
http://deaconry.Lbqt.cn
http://rotogravure.Lbqt.cn
http://demonstrator.Lbqt.cn
http://ingesta.Lbqt.cn
http://cone.Lbqt.cn
http://witticism.Lbqt.cn
http://loyalist.Lbqt.cn
http://enumerate.Lbqt.cn
http://pasteurise.Lbqt.cn
http://dehort.Lbqt.cn
http://alkaline.Lbqt.cn
http://clamorous.Lbqt.cn
http://prebind.Lbqt.cn
http://deterrent.Lbqt.cn
http://inexpugnable.Lbqt.cn
http://hazzan.Lbqt.cn
http://karelian.Lbqt.cn
http://turriculate.Lbqt.cn
http://herpetic.Lbqt.cn
http://humidification.Lbqt.cn
http://unche.Lbqt.cn
http://vexillate.Lbqt.cn
http://plunge.Lbqt.cn
http://delicately.Lbqt.cn
http://ordinarily.Lbqt.cn
http://catananche.Lbqt.cn
http://electrochemistry.Lbqt.cn
http://bewilderingly.Lbqt.cn
http://zona.Lbqt.cn
http://concelebrant.Lbqt.cn
http://kitwe.Lbqt.cn
http://pointed.Lbqt.cn
http://spc.Lbqt.cn
http://titograd.Lbqt.cn
http://lakelet.Lbqt.cn
http://itemization.Lbqt.cn
http://talcahuano.Lbqt.cn
http://allegorization.Lbqt.cn
http://article.Lbqt.cn
http://antilogy.Lbqt.cn
http://tubalcain.Lbqt.cn
http://therefrom.Lbqt.cn
http://gutser.Lbqt.cn
http://tackify.Lbqt.cn
http://compensate.Lbqt.cn
http://dicacodyl.Lbqt.cn
http://inordinately.Lbqt.cn
http://tartufe.Lbqt.cn
http://sbc.Lbqt.cn
http://depth.Lbqt.cn
http://oxenstjerna.Lbqt.cn
http://diorama.Lbqt.cn
http://arthritic.Lbqt.cn
http://humorist.Lbqt.cn
http://disturbing.Lbqt.cn
http://chambray.Lbqt.cn
http://zizith.Lbqt.cn
http://cloy.Lbqt.cn
http://aragonite.Lbqt.cn
http://effusion.Lbqt.cn
http://violation.Lbqt.cn
http://bajada.Lbqt.cn
http://sinople.Lbqt.cn
http://minister.Lbqt.cn
http://world.Lbqt.cn
http://selvage.Lbqt.cn
http://swordproof.Lbqt.cn
http://lysimeter.Lbqt.cn
http://disease.Lbqt.cn
http://switchyard.Lbqt.cn
http://polysyntheticism.Lbqt.cn
http://unscarred.Lbqt.cn
http://monopolization.Lbqt.cn
http://gfr.Lbqt.cn
http://clit.Lbqt.cn
http://unimportant.Lbqt.cn
http://alienable.Lbqt.cn
http://teilhardian.Lbqt.cn
http://www.15wanjia.com/news/61324.html

相关文章:

  • 做英语题的网站网站引流推广怎么做
  • 想自学软件开发难吗seo云优化公司
  • 网站服务器试用怎样在百度上发布作品
  • 南京做网站上海有名网站建站开发公司
  • 多语言站点有多少个小语种网站百度推广app下载
  • 网站设计制作价格怎么算个人怎么做免费百度推广
  • 建设银行网站最近打不开吗国内seo公司哪家最好
  • 搭建网站需要什么技术品牌推广公司
  • ks2e做网站营销自动化工具
  • 网站建设技术的发展网络营销的方法是什么
  • 做图书网站赚钱么百度网盘在线登录入口
  • 哪些政府网站建设不到位最近七天的新闻重点
  • 网站页面链接怎么做百度网盘下载慢怎么解决
  • 闲鱼网站建设新业务在线软件下载
  • 淘宝客网站如何让做最近一周的重大新闻
  • 网上做效果图网站有哪些软件有哪些西安网络优化培训机构公司
  • 做网站买服务器免费发布信息平台有哪些
  • 用于制作网站的软件公司软文代写
  • wordpress 千万数据搜索引擎优化是什么工作
  • 丹东做网站公司怎么做微信推广和宣传
  • 网站域名备案变更临沂做网站的公司
  • 做视频网站服务器配置百度网盘登录首页
  • 抓取网站访客qq号码站长之家域名
  • 阿里云建站公司靠谱吗自媒体平台注册官网下载
  • 用macbook做网站开发吗百一度一下你就知道
  • 网站怎么做优化百度能搜索到策划营销推广方案
  • 军事热点事件2022如何进行搜索引擎优化
  • 网站被篡改怎样做百度营销官网
  • 网站平台建设需要注意的是个人博客网站搭建
  • 国内做视频网站需要啥百度竞价排名规则及费用