SAP HANA - 按SQL脚本中的范围聚合日期

时间:2016-07-20 14:13:12

标签: sql sap hana hana-sql-script

我在table上有SAP HANA EFF:

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   

我希望获得SQL statement table OBJECT / PN / MANUF / QTY的汇总视图,但按日期排序。这就是我想要的。

OBJECT;PN;MANUFACTURER;DATE_FROM;DATE_TO;QTY    
OBJ1;PN1;MAN1;201601;201602;1 (from 01-2016 to 02-2016, OBJ1 contained 1 PN1)   
OBJ1;PN1;MAN1;201603;201603;2 (from 03-2016 to 03-2016, OBJ1 contained 2 PN1)   
OBJ1;PN1;MAN1;201604;201606;1 (from 04-2016 to 06-2016, OBJ1 contained 1 PN1)

我已经测试了很多解决方案,但没有什么效果好......我总是得到:

  • 从01-2016到06-2016的1行,qty = 1
  • 从2016年3月20日到03-2016的1行,qty = 2

这还不够......

我一直期待Window Functions SAP HANA FIRST_VALUE (partition by...)LAST_VALUE stored procedure,但它无法正常运作......

请问您有什么想法吗?

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

1 个答案:

答案 0 :(得分: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

您的样本数据输出如下面的截图

enter image description here

正如你所提到的,我使用SQL Lead function来计算下个月 我使用了Sum()汇总函数的Group By子句,以Object,PN和Manufacturer

为基础,每月收集数量。

我希望它有所帮助,