0

我正在尝试将一个 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 日)是第一行结束日期(1 月 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
4

1 回答 1

0

这是一个间隙和孤岛问题,您希望将“相邻”行组合在一起。我对 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 
于 2020-08-29T10:33:56.970 回答