0

我有这个tableEFF SAP HANA

OBJECT;PN;MANUFACTURER;MONTH;QTY   
OBJ1;PN1;MAN1;201601;1   
OBJ1;PN1;MAN1;201602;1   
OBJ1;PN1;MAN1;201603;2   
OBJ1;PN1;MAN1;201604;1   
OBJ1;PN1;MAN1;201605;1   
OBJ1;PN1;MAN1;201606;1   

我想获得by但排序 BY DATESQL statement的聚合视图。这就是我想要的。tableOBJECT / PN / MANUF / QTY

对象;PN;制造商;DATE_FROM;DATE_TO;数量    
OBJ1;PN1;MAN1;201601;201602;1 (从 01-2016 到 02-2016,OBJ1 包含 1 个 PN1)    
OBJ1;PN1;MAN1;201603;201603;2 (从 03-2016 到 03-2016,OBJ1 包含 2 个) PN1)    
OBJ1;PN1;MAN1;201604;201606;1 (从 04-2016 到 06-2016,OBJ1 包含 1 个 PN1)

我已经测试了许多解决方案,但没有一个效果很好......我总是获得:

  • 从 01-2016 到 06-2016 的 1 行,数量 = 1
  • 从 03-2016 到 03-2016 的 1 行,数量 = 2

那还不够 ...

我一直在寻找,Window Functions但它不能正常工作......SAP HANAFIRST_VALUE (partition by...)LAST_VALUE

请问您有什么想法吗?


注意:我已经stored procedure用 a实现了cursor它,它可以工作(在几个小时内),但我需要更快的东西。因为它涉及数十亿行。

4

1 回答 1

0

我认为你想要得到如下

select 
    "OBJECT", 
    PN, 
    MANUFACTURER, 
    Month as fromMonth, 
    Lead(Month,1) over (partition by  "OBJECT", PN, MANUFACTURER Order by Month) as toMonth,
    sum(Qty) as qty 
from EFF
group by
    "OBJECT", 
    PN, 
    MANUFACTURER,
    Month

您的示例数据的输出如下图所示

在此处输入图像描述

正如你提到的,我使用SQL Lead 函数计算下个月我使用 Group By 子句作为 SUM() 聚合函数来收集基于对象、PN 和制造商的每月数量

我希望它有所帮助,

于 2017-01-27T08:31:26.903 回答