我正在尝试将一个SAP ABAP代码转换为新引入的基于MYSQL的语言SAP AMDP(ABAP托管数据库过程(。
如果行的列值具有连续日期,我希望将其相加,这意味着如果下一行的开始日期是当前行的结束日期的下一天,则该值应该相加。
例如:下面是我的源表
EMP Startdate Enddate amount
1 1/1/2020 1/3/2020 2
1 1/4/2020 1/7/2020 3
1 1/8/2020 1/10/2020 4
1 1/15/2020 1/18/2020 5
2 1/3/2020 1/6/2020 3
2 1/12/2020 1/15/2020 4
2 1/16/2020 1/20/2020 5
3 1/4/2020 1/8/2020 5
3 1/9/2020 1/11/2020 6
3 1/14/2020 1/18/2020 7
3 1/21/2020 1/24/2020 7
3 1/25/2020 1/27/2020 5
第二行的开始日期(1月4日(是第一行的结束日期(3日(的第二天,第三行也是如此。
所以结果应该是单行,第一行的开始日期和第三行的结束日期,以及所有三行的总和。预期结果应如下所示。
EMP Startdate Enddate amount
1 1/1/2020 1/10/2020 9
1 1/15/2020 1/18/2020 5
2 1/3/2020 1/6/2020 3
2 1/12/2020 1/20/2020 9
3 1/4/2020 1/11/2020 11
3 1/14/2020 1/18/2020 7
3 1/21/2020 1/27/2020 12
这是一个缺口和孤岛问题,您需要将其组合在一起"相邻的";行。我对AMDP一无所知,但在MySQL中,你可以用窗口函数来处理这个问题:
select emp, min(start_date) start_date, max(end_date) end_date, sum(amount) amount
from (
select t.*, sum(case when start_date = lag_end_date + interval 1 day then 0 else 1 end) over(partition by emp order by start_date) grp
from (
select t.*, lag(end_date) over(partition by emp order by start_date) lag_end_date
from mytable t
) t
) t
group by emp, grp