oracle - 单行有效日期的日期 - 想要在多行中选择
问题描述
我在表格中有以下数据。
我正在尝试为给定的数据行构建一个包含 3 行的结果。
由于异常开始和结束日期在实际开始日期和结束日期之间
如果可能的话,我正在寻找一个在选择查询中返回以下结果的查询。
例外开始和结束日期也不必在实际开始和结束日期之内。它们甚至可以重叠或完全在外面。
解决方案
显然你想选择三个间隔
从实际开始日期到异常开始日期(不包括)
从异常开始到异常结束
从异常结束(独占)到实际结束
这可以通过下面的 SELECT 直接完成。
请注意,您需要为独占边界添加或减去一天
select PRODUCT, LOCATION, ACT_START_D, EXP_START_D -1 ACT_END_D from tab union all
select PRODUCT, LOCATION, EXP_START_D ACT_START_D, EXP_END_D ACT_END_D from tab union all
select PRODUCT, LOCATION, EXP_END_D +1 ACT_START_D, ACT_END_D from tab
order by 1,2,3
;
返回
P L ACT_START_D ACT_END_D
- - ------------------- -------------------
C L 10.12.2012 00:00:00 09.03.2020 00:00:00
C L 10.03.2020 00:00:00 10.04.2020 00:00:00
C L 11.04.2020 00:00:00 10.12.2024 00:00:00
您必须描述外部和重叠异常的预期逻辑并调整查询。
推荐阅读
- php - 响应式文件管理器未在 TinyMCE 上显示图像
- sql - 如何使用分隔符查找字符串的子字符串及其在 Oracle SQL 中的出现?
- python - find() 文本 message.content python 不和谐
- r - 带有R的emmeans函数中的specs参数
- python - Django 管理模板覆盖问题
- ios - IOS 模拟器延迟在 React Native 中加载新页面
- c++ - OpenCV SVM - 获取多类分类中的类数
- c# - 如何在asp net mvc中同时运行两个函数而不互相暂停
- r - 如何分析我在系统发育树的每个尖端都有多个个体的数据的特征?
- linux - 从两个不同的接口合并 tcpdump