首页 > 解决方案 > 使用给定日期拆分开始日期和结束日期

问题描述

我有以下场景,需要创建有效的查询。我可以使用过程或函数,但需要创建查询而不是过程和函数。

INPUT : 

ID   Start_Dt    End_Dt     Split_Dt
1   01-06-2020  30-06-2020  03-06-2020
2   15-07-2020  30-10-2020  12-08-2020
3   10-04-2020  20-05-2020  20-05-2020
4   20-04-2020  20-05-2020  20-04-2020


Scenario_1
Start_Date : 01-06-2020
End_Date   : 30-06-2020
Split_Date : 03-06-2020

Scenario_2
Start_Date : 15-07-2020
End_Date   : 30-10-2020
Split_Date : 12-08-2020

Output:

ID   Start_Dt   End_Dt      Split_Dt
1   01-06-2020  03-06-2020  2020-06-03
1   04-06-2020  30-06-2020  2020-06-03
2   01-06-2020  12-08-2020  2020-06-03
2   13-08-2020  30-10-2020  2020-06-03
3   10-04-2020  20-05-2020  20-05-2020
4   20-04-2020  20-05-2020  20-04-2020

标签: postgresql

解决方案


看起来ID = 2您的示例输出中的第一条记录有错误。

如果这是一个错误,那么这个查询应该可以工作:

select id, start_dt, split_dt 
  from date_splits
 where start_dt < split_dt
union all
select id, split_dt + 1, end_dt
  from date_splits
 where split_dt + 1 < end_dt
order by id, start_dt;

推荐阅读