首页 > 解决方案 > 单行有效日期的日期 - 想要在多行中选择

问题描述

我在表格中有以下数据。

我正在尝试为给定的数据行构建一个包含 3 行的结果。

在此处输入图像描述

由于异常开始和结束日期在实际开始日期和结束日期之间

如果可能的话,我正在寻找一个在选择查询中返回以下结果的查询。

在此处输入图像描述

例外开始和结束日期也不必在实际开始和结束日期之内。它们甚至可以重叠或完全在外面。

标签: oracle

解决方案


显然你想选择三个间隔

  • 从实际开始日期到异常开始日期(不包括)

  • 从异常开始到异常结束

  • 从异常结束(独占)到实际结束

这可以通过下面的 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

您必须描述外部和重叠异常的预期逻辑并调整查询。


推荐阅读