根据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

第二行的开始日期(4月1日)是第一行的结束日期(3月1日)的第二天,第三行的结束日期相同。

因此,结果应为单行,第一行的开始日期,第三行的结束日期以及所有三行的总计。预期结果应如下所示。

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 

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...