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

Summing up column values of rows based on consecutive date in AMDP/MYSQL

我正在尝试将一个 SAP ABAP 代码转换为基于 MYSQL.

的新引入语言 SAP AMDP(ABAP 托管数据库过程)

我想对具有连续日期的行的列值求和,这意味着如果下一行的开始日期是当前行结束日期的第二天,那么该值应该求和。

例如:下面是我的来源table

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

这是一个间隙和孤岛问题,您希望将“相邻”行组合在一起。我对 AMDP 一无所知,但在 MySQL 中,您可以使用 window 函数来解决这个问题:

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