我试图将一个SAP ABAP代码转换为新引入的语言SAP (ABAP管理数据库过程),这是基于MYSQL的。
我想要总结行的列值,如果它们具有连续的日期,意味着如果下一行的开始日期是当前行结束日期的下一天,那么值应该是总和。
下面是我的源表
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-Jan)是第一行结束日期的下一天(3-Jan),第三行的开始日期相同。
因此,结果应该是单行,第一行的开始日期和第三行的结束日期,以及所有三行的总数。预期结果应如下所示。
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发布于 2020-08-29 10:33:56
这是一个空白和岛屿问题,您希望将“相邻”行组合在一起。我对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 https://stackoverflow.com/questions/63644947
复制相似问题