假设一个时间序列,其中每个时间点都有一个值。我必须通过计算当前值+先前值的总和来计算连续总和。然而,棘手的是,总和应加上限,因此不得超过某个值。
例:
总和不得超过+2。
+-----+---------+------------+
| row | measure | capped sum |
+-----+---------+------------+
| 1 | 1 | 1 |
| 2 | 3 | 2 |
| 3 | 4 | 2 |
| 4 | -2 | 0 |
| 5 | 1 | 1 |
+-----+---------+------------+
例如使用上一行“ 2”中的“上限和”,并加上当前值,计算第4行的“上限和”。由于结果
问题是,对于HANA,我不能在“上限金额”字段上使用LAG / Window函数。这会给我一个“未知列”错误。
有什么想法如何在不使用for循环的情况下在SQL / HANA SQL脚本中解决此问题(这会非常慢)?
最佳答案
此解决方案使用HANA不支持的递归cte(根据OP)。发布与支持它的数据库一起使用的解决方案。
WITH ROWNUMS AS
(SELECT T.*,
ROW_NUMBER() OVER(ORDER BY ROW) AS RNUM
FROM T)
,RCTE AS
(SELECT ROW,
RNUM,
MEASURE,
MEASURE AS CAPPED_SUM
FROM ROWNUMS
WHERE RNUM=1
UNION ALL
SELECT RN.ROW,
RN.RNUM,
RN.MEASURE,
CASE
WHEN R.CAPPED_SUM+RN.MEASURE>=2 THEN 2
ELSE R.CAPPED_SUM+RN.MEASURE
END
FROM ROWNUMS RN
JOIN RCTE R ON R.RNUM=RN.RNUM-1 )
SELECT ROW,
MEASURE,
CAPPED_SUM
FROM RCTE
Sample Demo