首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AMDP/MYSQL中基于连续日期的行列值的求和

AMDP/MYSQL中基于连续日期的行列值的求和
EN

Stack Overflow用户
提问于 2020-08-29 08:27:14
回答 1查看 840关注 0票数 0

我试图将一个SAP ABAP代码转换为新引入的语言SAP (ABAP管理数据库过程),这是基于MYSQL的。

我想要总结行的列值,如果它们具有连续的日期,意味着如果下一行的开始日期是当前行结束日期的下一天,那么值应该是总和。

下面是我的源表

代码语言:javascript
复制
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),第三行的开始日期相同。

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-29 10:33:56

这是一个空白和岛屿问题,您希望将“相邻”行组合在一起。我对AMDP一无所知,但在MySQL中,您可以使用窗口函数来处理这个问题:

代码语言:javascript
复制
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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63644947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档