【发布时间】:2017-02-24 01:33:53
【问题描述】:
我们目前在 SAP Hana SPS12 中遇到了Window Functions 的问题。
我们的一个错误是当我们使用STRING_AGG 函数时。
代码如下:
/*
CREATE TABLE TEST_STR_AGG (
GROUP_ID varchar(1)
, CLASS_ID varchar(5)
, MEMBER varchar(5)
);
*/
TRUNCATE TABLE TEST_STR_AGG;
INSERT INTO TEST_STR_AGG VALUES ('A', 'A_XX1', 'A0001');
INSERT INTO TEST_STR_AGG VALUES ('A', 'A_XX1', 'A0002');
INSERT INTO TEST_STR_AGG VALUES ('A', 'A_XX1', 'A0003');
INSERT INTO TEST_STR_AGG VALUES ('A', 'A_XX2', 'A0004');
INSERT INTO TEST_STR_AGG VALUES ('A', 'A_XX2', 'A0005');
INSERT INTO TEST_STR_AGG VALUES ('A', 'A_XX3', 'A0006');
INSERT INTO TEST_STR_AGG VALUES ('B', 'B_XX1', 'B0001');
INSERT INTO TEST_STR_AGG VALUES ('B', 'B_XX2', 'B0002');
INSERT INTO TEST_STR_AGG VALUES ('B', 'B_XX3', 'B0003');
INSERT INTO TEST_STR_AGG VALUES ('B', 'B_XX4', 'B0004');
INSERT INTO TEST_STR_AGG VALUES ('B', 'B_XX4', 'B0005');
INSERT INTO TEST_STR_AGG VALUES ('B', 'B_XX4', 'B0006');
SELECT GROUP_ID
, CLASS_ID
, STRING_AGG( MEMBER, ' ; ' **ORDER BY MEMBER ASC** ) as MEMBERS
FROM TEST_STR_AGG
GROUP BY GROUP_ID
, CLASS_ID ;
在安装补丁之前,STRING_AGG 曾经与 ORDER BY 子句完美配合。现在,它只适用于少量的行,因为它适用于我给你的示例。当我们处理超过 500k 行时,如果我们在 STRING_AGG 中添加 ORDER BY 子句,某些行将从我们的结果中消失。如果我们不这样做,它会起作用。
我们在 FIRST_VALUE 和 LAST_VALUE 函数上遇到了同样的问题。
这似乎是破坏结果的核心优化规则...
请问有人知道吗?
非常感谢
【问题讨论】:
标签: aggregate-functions window-functions hana