Teradata 如何仅在特定行上运行前面的无边界行

Teradata 如何仅在特定行上运行前面的无边界行,teradata,cumulative-sum,Teradata,Cumulative Sum,我有一个SQL查询,它正在计算2列的运行总数。每周都会有新的数据被添加到DUMMY_表中,每次我运行该表的running total时,它都会计算我不需要的所有前面行的running total。我只需要新插入的数据的运行总数。如果我必须运行前面所有行的总和,那将是对资源的浪费。我想知道是否有办法只返回新插入的一周的运行总数 SELECT RID, FYFW, VOL, FAILED_VOL, SUM(VOL) OVER (PARTITION BY RID, SUBSTR(TRIM(FYFW)

我有一个SQL查询,它正在计算2列的运行总数。每周都会有新的数据被添加到
DUMMY_表中
,每次我运行该表的
running total
时,它都会计算我不需要的所有前面行的running total。我只需要新插入的数据的运行总数。如果我必须运行前面所有行的总和,那将是对资源的浪费。我想知道是否有办法只返回新插入的一周的运行总数

SELECT 
RID,
FYFW,
VOL,
FAILED_VOL,
SUM(VOL) OVER (PARTITION BY RID, SUBSTR(TRIM(FYFW), 1, 4)   ORDER BY RID,FYFW  ROWS UNBOUNDED PRECEDING) AS YTD_VOL,
SUM(FAILED_VOL) OVER (PARTITION BY RID, SUBSTR(TRIM(FYFW), 1, 4)   ORDER BY RID,FYFW  ROWS UNBOUNDED PRECEDING) AS YTD_FAILED_VOL,
FROM DUMMY_TABLE
GROUP BY 1,2,3,4
ORDER BY 1,2;
我尝试使用
where
,但它会过滤数据。我寻找这个的原因是,如果我每周都有新的数据,并且表的大小为10K记录,
running total
将重新计算所有10K记录和我插入的新数据

SELECT 
RID,
FYFW,
VOL,
FAILED_VOL,
SUM(VOL) OVER (PARTITION BY RID, SUBSTR(TRIM(FYFW), 1, 4)   ORDER BY RID,FYFW  ROWS UNBOUNDED PRECEDING) AS YTD_VOL,
SUM(FAILED_VOL) OVER (PARTITION BY RID, SUBSTR(TRIM(FYFW), 1, 4)   ORDER BY RID,FYFW  ROWS UNBOUNDED PRECEDING) AS YTD_FAILED_VOL,
FROM DUMMY_TABLE
GROUP BY 1,2,3,4
ORDER BY 1,2;

要计算运行总数,必须从第一行开始。除非您有非常多的行,否则这通常是非常有效的。避免这种情况的唯一方法是将这些值存储为列,并在加载期间进行计算。顺便说一句,不需要将
RID
添加到Order By,因为它已经被它分割了。@dnoeth当你说行数很多时,我们说的是几百万行吗?几百万很多:-)