使用给定日期拆分开始日期和结束日期

时间:2020-07-24 05:26:32

标签: postgresql

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

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

1 个答案:

答案 0 :(得分:0)

在示例输出的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;