gpt4 book ai didi

sql - 合并oracle或db2中两个表之间的日期范围

转载 作者:行者123 更新时间:2023-12-02 00:46:57 25 4
gpt4 key购买 nike

我有两个表,其中包含员工的任期和费率数据,如下所示:

1) Tenure_T

  E_Id         Start_Dt      End_Dt

1 1-Jan-2013 31-Dec-2013
1 1-Jan-2014 30-Jun-2014
1 1-Jul-2014 31-Jul-2014
1 1-Aug-2014 31-Dec-2014

2) Rate_T

E_Id      Rt_Strt_Dt  Rt_End_Dt   Amt

1 1-Jun-2013 30-Nov-2013 100
1 1-Dec-2013 31-Jan-2014 200
1 1-Feb-2014 31-Mar-2014 300
1 1-Apr-2014 31-Jul-2014 400
1 1-Aug-2014 31-Jan-2015 500

我想加入这些表并需要如下输出:

3) Emp_T

E_Id Start_Dt      End_Dt                 Amt

1 1-Jan-2013 31-May-2013 0
1 1-Jun-2013 30-Nov-2013 100
1 1-Dec-2013 31-Dec-2013 200
1 1-Jan-2014 31-Jan-2014 200
1 1-Feb-2014 31-Mar-2014 300
1 1-Apr-2014 31-Jul-2014 400
1 1-Aug-2014 31-Dec-2014 500
1 1-Jan-2014 31-Jan-2015 500

因此,只要有日期重叠,就开始通过 sql 使用适当的 Amt 来打破它。数据量不大,因此可以编写/完成多个查询/多次扫描,但解决方案应该是动态的。

最佳答案

您可以通过首先仅根据开始日期排列数据,然后使用 lead() 函数重新聚合来实现此目的。我认为以下内容符合您的要求:

select t.e_id, t.start_dte,
lead(t.start_dte) over (partition by t.e_id order by t.start_dte) as end_dte,
max(amt)
from ((select e_id, start_dt, 0 as amt
from tenure_t
) union all
(select e_id, rt_start_dte, amt
from rate_t
)
) t
group by t.e_id, t.start_dte;

关于sql - 合并oracle或db2中两个表之间的日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27658704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com