sql - 删除日期范围重叠的行
问题描述
我有一个包含 start_date 和 end_date 列的表,我想删除 start_date 和 end_date 都在现有日期范围内的记录
源数据:
start_date end_date
2019-03-18 00:00:00.000 2019-04-08 00:00:00.000
2019-04-01 00:00:00.000 2019-05-31 00:00:00.000
2019-04-03 00:00:00.000 2019-04-24 00:00:00.000
2019-04-24 00:00:00.000 2019-05-05 00:00:00.000
2019-05-06 00:00:00.000 2019-05-16 00:00:00.000
2019-05-06 00:00:00.000 2019-05-20 00:00:00.000
2019-05-06 00:00:00.000 2019-06-17 00:00:00.000
2019-05-10 00:00:00.000 2019-05-14 00:00:00.000
预期结果:
start_date end_date
2019-03-18 00:00:00.000 2019-04-08 00:00:00.000
2019-04-01 00:00:00.000 2019-05-31 00:00:00.000
2019-05-06 00:00:00.000 2019-06-17 00:00:00.000
解决方案
嗯,这真的没那么难,你只需要逐字逐句地检查你想要检查的东西。只需验证没有任何记录会在他们自己的开始日期和结束日期之间包含您的开始日期和结束日期。
像这样的东西会起作用:
select *
from so_58088216 wrapping
where not exists (select *
from so_58088216 wrapped
where wrapping.start_date between wrapped.start_date and wrapped.end_date
and wrapping.end_date between wrapped.start_date and wrapped.end_date
-- don't check against yourself, this would be easier if had an ID or something
and wrapping.start_date != wrapped.start_date
and wrapping.end_date != wrapped.end_date)
推荐阅读
- r - ggplot2 R中geom_label函数的对齐问题
- snowflake-cloud-data-platform - snowsql中的整数函数
- python - 释放 ImageButton 时调用 .py 脚本时出现 SyntaxError
- java - 图标图像未显示 -Java GUI
- github - 撤消 Git 分支提交和合并
- node.js - 出现错误:client.users.cache.get
- node.js - 将数组转换为打字稿选项
- reactjs - 默认情况下如何配置“在您的网络上”的 CRA?
- r - 使用 dplyr 在 R 中提取具有不同客户 ID 的相同客户信息
- java - 回收器适配器项目错误