根据AMDP/MYSQL中的连续日期汇总行的列值



我正在尝试将一个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 

相关内容

  • 没有找到相关文章

最新更新