Как включить функцию суммы и ранга в Teradata SQL? - PullRequest
1 голос
/ 08 мая 2019

Я пытаюсь суммировать стоимость нефти за первые 8 месяцев за первые 8 месяцев. Я немного застрял в этом вопросе о том, как включить функцию суммы и ранга в код SQL.

Вот мой код SQL: -

SELECT WELL_NAME,
                Number_of_Months_on_Prod,
                OIL,
                ROW_NUMBER() OVER(PARTITION BY WELL_NAME ORDER BY OIL DESC) AS RANK_OIL,
                SUM(CASE WHEN (RANK_OIL >= 1) AND (RANK_OIL) <= 6 THEN  Coalesce(BOE6, 0) ELSE 0 END) Over (PARTITION BY WELL_NAME ) as  BEST_6_OF_8_MONTH_OIL

FROM TABLE_WELL
ORDER BY WELL_NAME ;

У меня заказанная аналитическая функция не может быть вложенной ошибкой. Любая помощь будет принята с благодарностью. Вот мой примерный набор данных.

Sample_Data

1 Ответ

1 голос
/ 08 мая 2019

Я вижу это несколько уровней оконных функций:

SELECT WELL_NAME, Number_of_Months_on_Prod, OIL,
        SUM(CASE WHEN RANK_OIL <= 6 AND SEQNUM <= 8 THEN BOE6 END) OVER (PARTITION BY WELL_NAME) AS BEST_6_OF_8_MONTH_OIL
FROM (SELECT TW.*,
             ROW_NUMBER() OVER (PARTITION BY WELL_NAME, (CASE WHEN SEQNUM <= 8 THEN 1 ELSE 2 END)
                                ORDER BY OIL DESC
                               ) AS RANK_OIL
      FROM (SELECT TW.*,
                   ROW_NUMBER() OVER (PARTITION BY WELL_NAME ORDER BY OIL DESC) AS SEQNUM
            FROM TABLE_WELL TW
           ) TW
     ) TW
ORDER BY WELL_NAME ;
...