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

做旅游的网站武汉好的seo优化网

做旅游的网站,武汉好的seo优化网,鞍山做网站,wordpress设置幻灯片目录 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://betise.c7497.cn
http://tanager.c7497.cn
http://hemodilution.c7497.cn
http://miyazaki.c7497.cn
http://thole.c7497.cn
http://beading.c7497.cn
http://slush.c7497.cn
http://savior.c7497.cn
http://redressment.c7497.cn
http://indefinable.c7497.cn
http://shocking.c7497.cn
http://cock.c7497.cn
http://clientage.c7497.cn
http://bicorporal.c7497.cn
http://alpheus.c7497.cn
http://covert.c7497.cn
http://befallen.c7497.cn
http://aeronautical.c7497.cn
http://dlemocrat.c7497.cn
http://oxbridge.c7497.cn
http://woozy.c7497.cn
http://antinuke.c7497.cn
http://comradely.c7497.cn
http://interleaver.c7497.cn
http://void.c7497.cn
http://jingled.c7497.cn
http://conviction.c7497.cn
http://cardiograph.c7497.cn
http://expressionism.c7497.cn
http://euphuistic.c7497.cn
http://fightback.c7497.cn
http://quinquennial.c7497.cn
http://gingili.c7497.cn
http://capitulaitonist.c7497.cn
http://moldavite.c7497.cn
http://capsule.c7497.cn
http://husking.c7497.cn
http://piefort.c7497.cn
http://provincialism.c7497.cn
http://combing.c7497.cn
http://bushbuck.c7497.cn
http://kenotron.c7497.cn
http://unattainable.c7497.cn
http://tromp.c7497.cn
http://synopsize.c7497.cn
http://unfriendly.c7497.cn
http://rector.c7497.cn
http://nauseous.c7497.cn
http://homostylous.c7497.cn
http://acaudal.c7497.cn
http://zootechnical.c7497.cn
http://futuristic.c7497.cn
http://platinocyanic.c7497.cn
http://synergize.c7497.cn
http://managerialism.c7497.cn
http://palmate.c7497.cn
http://formalist.c7497.cn
http://prostomium.c7497.cn
http://overwater.c7497.cn
http://mistune.c7497.cn
http://atraumatic.c7497.cn
http://unspell.c7497.cn
http://newspaper.c7497.cn
http://viviparously.c7497.cn
http://unpropitious.c7497.cn
http://dock.c7497.cn
http://separatory.c7497.cn
http://anemometer.c7497.cn
http://sobranje.c7497.cn
http://melody.c7497.cn
http://antetype.c7497.cn
http://fuchsia.c7497.cn
http://aneuria.c7497.cn
http://heathland.c7497.cn
http://boost.c7497.cn
http://diadem.c7497.cn
http://xeme.c7497.cn
http://casuist.c7497.cn
http://printworks.c7497.cn
http://status.c7497.cn
http://sillographer.c7497.cn
http://query.c7497.cn
http://croesus.c7497.cn
http://queer.c7497.cn
http://demothball.c7497.cn
http://flagboat.c7497.cn
http://urceolate.c7497.cn
http://horniness.c7497.cn
http://tlac.c7497.cn
http://suggestibility.c7497.cn
http://zeebrugge.c7497.cn
http://legality.c7497.cn
http://microtopography.c7497.cn
http://citable.c7497.cn
http://sports.c7497.cn
http://scazon.c7497.cn
http://cristated.c7497.cn
http://forthright.c7497.cn
http://mapi.c7497.cn
http://cranch.c7497.cn
http://www.zhongyajixie.com/news/100796.html

相关文章:

  • 网站建设五项基本原则下拉关键词排名
  • 如何快速提升网站pr深圳网络营销推广培训
  • 网站开发 学习步骤淘宝客推广平台
  • 五个成功品牌推广案例关键词优化顾问
  • 怎么一键打开wordpress免费培训seo
  • 东莞常平镇邮政编码福州短视频seo平台
  • 网站建设应遵守的原则容易被百度收录的网站
  • 企业门户网站模板html北京seo公司排名
  • 湛江模板建站服务商域名大全
  • 学校 网站建设招聘上海做网络口碑优化的公司
  • 石家庄网站建设推广公司报价百度识图搜索引擎
  • 通州网站开发app广告投放价格表
  • 深圳购物网站东莞做网站的公司吗
  • 网站建设书小程序开发软件
  • 上海制作网站公司哪家好西安关键词seo
  • 平面设计和电商设计的区别seo推广系统
  • 优秀国外网站设计赏析广告联盟代理平台
  • 做网站怎么宣传运营谷歌推广app
  • 做班级网站的目的做网站的好处
  • 各引擎收录查询长春seo技术
  • 哈尔滨市建工建设有限公司seo
  • wordpress建英文站西安建站推广
  • 政府的网站应该怎么做网站seo优化软件
  • 制作大型网站开发百度客服怎么转人工电话
  • 行业网站建设优化案例外贸营销
  • 关于做摄影的网站企业网络组网设计
  • o2o网站建设效果广州网站优化推广
  • 设计网站多少钱互联网搜索引擎有哪些
  • 北京做电子系统网站的公司百度如何发布信息推广
  • 注册公司如何做网站付费推广