【发布时间】:2023-04-05 05:29:01
【问题描述】:
我在SAP HANA 上有这个table 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 但按日期排序 的聚合视图。这就是我想要的。
对象;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)
我已经测试了很多解决方案,但没有一个效果很好......我总是得到:
- 1 行,从 01-2016 到 06-2016,数量 = 1
- 1 行从 03-2016 到 03-2016,数量 = 2
还不够……
我一直在寻找SAP HANA 中的Window Functions,比如FIRST_VALUE (partition by...) 和LAST_VALUE,但它无法正常工作...
请问您有什么想法吗?
注意:我已经实现了 stored procedure 和 cursor 来实现它,它可以工作(在几个小时内),但我需要更快的东西。因为它涉及数十亿行。
【问题讨论】:
-
想要的逻辑还不清楚。每当数量发生变化时,您想要一个新的分组吗?在这种情况下,您应该寻找带有窗口函数的“查找最长连续”示例。
-
感谢您回答拉斯。是的,我确实想要一个按数量对行进行分组但尊重时间顺序的解决方案。我正在编写基于
LEAD/LAG和ROW_NUMBER函数的解决方案。
标签: sql sap hana hana-sql-script