【发布时间】:2019-10-07 07:30:37
【问题描述】:
我在一个表格(即 TAB1)中有多个日期范围,如下所示。
START_DATE | END_DATE
-------------------------
1-Jan-2004 | 31-Dec-2005
1-Jan-2001 | 31-Dec-2001
1-Jan-2011 | 31-Dec-2015
现在基于输入日期范围,假设它与表中至少 1 行重叠,我想更改现有行的日期。
示例 1: 如果输入日期范围是 1-Jan-2012 | 2017 年 12 月 31 日,然后第 3 行应该是 2011 年 1 月 1 日 | 2017 年 12 月 31 日。其余行应保持不变。
示例 2: 如果输入日期范围是 1-Jan-2007 | 2012 年 12 月 31 日,然后第 3 行应该是 2007 年 1 月 1 日 | 2015 年 12 月 31 日。其余行应保持不变。
示例 3: 如果输入日期范围是 1-Jan-2009 | 2017 年 12 月 31 日,然后第 3 行应该是 2009 年 1 月 1 日 | 2017 年 12 月 31 日。该行的其余部分应保持不变。
示例 4: 如果输入日期范围是 1-Jan-2005 | 2012 年 12 月 31 日,然后第 3 行应该是 2006 年 1 月 1 日 | 2015 年 12 月 31 日。该行的其余部分应保持不变。
示例 5: 如果输入日期范围是 1-Jan-2003 | 2003 年 12 月 31 日,那么第 1 行应该是 2003 年 1 月 1 日 | 2005 年 12 月 31 日。该行的其余部分应保持不变。
对上面的 SQL 查询有什么建议吗?
【问题讨论】:
-
"示例 4:如果输入日期范围是 2005 年 1 月 1 日 | 2012 年 12 月 31 日,那么第 3 行应该是 2006 年 1 月 1 日" - 不应该是 1 月-2005 年?
-
不,第 1 行已涵盖 2004 年 1 月 1 日 | 2005 年 12 月 31 日。因此应输出以下任一选项: OPTION-1: Row-1 应更改为 1-Jan-2004 | 2010 年 12 月 31 日,其余行未更改或 OPTION-2:第 3 行应为 2006 年 1 月 1 日 | 2015 年 12 月 31 日。该行的其余部分应保持不变。
-
"示例 5:如果输入日期范围是 2003 年 1 月 1 日 | 2003 年 12 月 31 日,那么第 2 行应该是 2003 年 1 月 1 日 | 2005 年 12 月 31 日" 为什么选择第 2 行?
-
您的规则需要明确的解释。请编辑问题。
-
@Serg 我确定他指的是“示例 5”中的第 1 行而不是第 2 行。