Teradata SQL 扩展 + 累积

Teradata SQL EXPAND + ACCUMULATE

我有入职数据,随着时间的推移计算 ID。我扩充了资料,但还需要积累

我有:

ONBOARDING_DATE ONBOARDED ONBOARDED_EXPANDED
12/06/2018                          
13/06/2018                          
14/06/2018            2            2
15/06/2018                         2
17/06/2018                         2
18/06/2018            5            5
19/06/2018                         5
20/06/2018                         5

随着越来越多的 ID 被加入,我需要它来积累,但无法找到可以与 expand 结合的正确功能。

ONBOARDING_DATE ONBOARDED ONBOARDED_EXPANDED_ACCUMULATED
12/06/2018                        
13/06/2018                        
14/06/2018            2            2
15/06/2018                         2
17/06/2018                         2
18/06/2018            5            7
19/06/2018                         7
20/06/2018                         7

我的脚本,

SELECT 

a.ONBOARDING_DATES
, b.ONBOARDED
, SUM(ONBOARDED) OVER ( PARTITION BY 1
                    ORDER BY ONBOARDING_DATE ASC
                    RESET WHEN ONBOARDED<>0 ) AS ONBOARDED_EXPANDED

FROM

        (
        SELECT 

        CAST(CALENDAR_DATE AS DATE) AS ONBOARDING_DATES FROM 
SYS_CALENDAR.CALENDAR

        WHERE ONBOARDING_DATES BETWEEN ADD_MONTHS(CURRENT_DATE, - 9)  AND ADD_MONTHS(CURRENT_DATE, + 9)

        ) a

LEFT JOIN
    (

            SELECT DISTINCT

            COUNT(ID) AS ONBOARDED
            , WAVE_DATE

            FROM ENV0.R_ONBOARDING

            WHERE WAVE_DATE IS NOT NULL

            GROUP BY WAVE_DATE

    ) b

    ON a.ONBOARDING_DATS = b.WAVE_DATE

    ORDER BY a.ONBOARDING_DATE

感谢您的帮助。

你似乎只想要一个累计和:

select ONBOARDING_DATE, ONBOARDED,
       sum(onboarded) over (order by onboarding_date rows between unbounded preceding and current row) as ONBOARDED_EXPANDED
from t;

您的 RESET WHEN 可以使用 LAST_VALUEIGNORE NULLS 重写,这会在 Explain 中产生一个 STATS 步,而不是两个。如果您想同时计算 ONBOARDED_EXPANDEDONBOARDED_EXPANDED_ACCUMULATED,您也可以一步将它们组合起来:

SELECT 
   a.ONBOARDING_DATES
   ,b.ONBOARDED
   ,SUM(ONBOARDED) 
    OVER (ORDER BY ONBOARDING_DATE ASC
          ROWS UNBOUNDED PRECEDIND) AS ONBOARDED_EXPANDED
   ,LAST_VALUE(ONBOARDED IGNORE NULLS) 
    OVER (ORDER BY ONBOARDING_DATE ASC
          ROWS UNBOUNDED PRECEDIND) AS ONBOARDED_EXPANDED_ACCUMULATE

相同的 PARTITION,相同的 ORDER 将两个计算合并为一个步骤。