您的位置:首页 > 教育 > 培训 > python自学必看的3本书_成全视频免费观看在线看大全_短视频推广引流方案_seo要点

python自学必看的3本书_成全视频免费观看在线看大全_短视频推广引流方案_seo要点

2025/5/19 13:38:26 来源:https://blog.csdn.net/weixin_66919047/article/details/142376012  浏览:    关键词:python自学必看的3本书_成全视频免费观看在线看大全_短视频推广引流方案_seo要点
python自学必看的3本书_成全视频免费观看在线看大全_短视频推广引流方案_seo要点

一、准备工作

Create table If Not Exists Failed (fail_date date);
Create table If Not Exists Succeeded (success_date date);
Truncate table Failed;
insert into Failed (fail_date) values ('2018-12-28');
insert into Failed (fail_date) values ('2018-12-29');
insert into Failed (fail_date) values ('2019-01-04');
insert into Failed (fail_date) values ('2019-01-05');
Truncate table Succeeded;
insert into Succeeded (success_date) values ('2018-12-30');
insert into Succeeded (success_date) values ('2018-12-31');
insert into Succeeded (success_date) values ('2019-01-01');
insert into Succeeded (success_date) values ('2019-01-02');
insert into Succeeded (success_date) values ('2019-01-03');
insert into Succeeded (success_date) values ('2019-01-06');

表:Failed

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| fail_date    | date    |
+--------------+---------+
该表主键为 fail_date (具有唯一值的列)。
该表包含失败任务的天数.

表: Succeeded

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| success_date | date    |
+--------------+---------+
该表主键为 success_date (具有唯一值的列)。
该表包含成功任务的天数.

系统 每天 运行一个任务。每个任务都独立于先前的任务。任务的状态可以是失败或是成功。

编写解决方案找出 2019-01-01 到 2019-12-31 期间任务连续同状态 period_state 的起止日期(start_date 和 end_date)。即如果任务失败了,就是失败状态的起止日期,如果任务成功了,就是成功状态的起止日期。

最后结果按照起始日期 start_date 排序

返回结果样例如下所示:

示例 1:

输入:
Failed table:
+-------------------+
| fail_date         |
+-------------------+
| 2018-12-28        |
| 2018-12-29        |
| 2019-01-04        |
| 2019-01-05        |
+-------------------+
Succeeded table:
+-------------------+
| success_date      |
+-------------------+
| 2018-12-30        |
| 2018-12-31        |
| 2019-01-01        |
| 2019-01-02        |
| 2019-01-03        |
| 2019-01-06        |
+-------------------+
输出:
+--------------+--------------+--------------+
| period_state | start_date   | end_date     |
+--------------+--------------+--------------+
| succeeded    | 2019-01-01   | 2019-01-03   |
| failed       | 2019-01-04   | 2019-01-05   |
| succeeded    | 2019-01-06   | 2019-01-06   |
+--------------+--------------+--------------+
解释:
结果忽略了 2018 年的记录,因为我们只关心从 2019-01-01 到 2019-12-31 的记录
从 2019-01-01 到 2019-01-03 所有任务成功,系统状态为 "succeeded"。
从 2019-01-04 到 2019-01-05 所有任务失败,系统状态为 "failed"。
从 2019-01-06 到 2019-01-06 所有任务成功,系统状态为 "succeeded"。

 二、分析

 三、实现

with t as (                      --  连接两张表select 'succeeded' as period_state,success_date date from succeeded
union allselect 'failed' as failed,fail_date date from failed
), t1 as (                     select                       -- 对日期排序并筛选2019年时间*,row_number() over (partition by period_state order by date) rnfrom t where date between '2019-01-01' and '2019-12-31'
), t2 as (select*,date - INTERVAL rn DAY rn1   -- 时间与排序做差值,时间减去rn相应天数,时间相同的为连续from t1
), t3 as (selectperiod_state,min(date) start_date,     -- 开始时间max(date) end_date,       -- 结束时间rn1 from t2 group by period_state,rn1
)
select period_state,start_date,end_date from t3 order by start_date;  

 四、总结

本题需要自行开列,此类连续的题都可以用此方法求差值来查看差值是否相同来判断是否连续;在求差值前就必须进行开窗排序;此题中求差值必须是求出时间减去天数的时间,不可以截取时间的日来与排序作差,会出错;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com