Использование LAG после SUM над PARTITION - PullRequest
1 голос
/ 18 марта 2020
+---------+----------+---------+------------+-------+---------+---------------+
| Product | Version  | Country |    Week    | sales | returns | Running_sales |
+---------+----------+---------+------------+-------+---------+---------------+
| Pdt1    | pdt1ver1 | Aus     | 2020M01W01 |    10 |       3 |             7 |
| pdt1    | pdt1ver1 | Fra     | 2020M01W01 |     8 |       2 |             6 |
| pdt1    | pdt1ver1 | Fra     | 2020M01W02 |    15 |       5 |            16 |
| pdt1    | pdt1ver2 | UK      | 2020M01W01 |    20 |       5 |            15 |
| pdt1    | pdt1ver2 | UK      | 2020M01W02 |    15 |       1 |            29 |
| pdt1    | pdt1ver2 | UK      | 2020M01w03 |     9 |       0 |            38 |
| pdt2    | pdt2ver1 | Fra     | 2020M01W01 |     5 |       1 |             4 |
| pdt2    | pdt2ver1 | Fra     | 2020M01W02 |     3 |       0 |             7 |
+---------+----------+---------+------------+-------+---------+---------------+

У меня есть представление с данными и промежуточным итогом, показанным ранее. Это простой выбор, также с этим в операторе выбора (здесь уже есть помощь по этому вопросу):

Sum(sales-returns) over(
  partition by Version, Country 
  Order by Week 
  ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) Running_sales

Теперь мне нужен еще один столбец, который дал бы результаты предыдущей недели ( но, оставаясь в подгруппе, в которой он должен быть, это означает, что у меня не может быть ничего в строках 1, 2, 4 и 7, потому что предыдущей строки нет), например:

+---------+----------+---------+------------+-------+---------+---------------+------------------+
| Product | Version  | Country |    Week    | sales | returns | Running_sales | previous_returns |
+---------+----------+---------+------------+-------+---------+---------------+------------------+
| Pdt1    | pdt1ver1 | Aus     | 2020M01W01 |    10 |       3 |             7 |                  |
| pdt1    | pdt1ver1 | Fra     | 2020M01W01 |     8 |       2 |             6 |                  |
| pdt1    | pdt1ver1 | Fra     | 2020M01W02 |    15 |       5 |            16 |                2 |
| pdt1    | pdt1ver2 | UK      | 2020M01W01 |    20 |       5 |            15 |                  |
| pdt1    | pdt1ver2 | UK      | 2020M01W02 |    15 |       1 |            29 |                5 |
| pdt1    | pdt1ver2 | UK      | 2020M01w03 |     9 |       0 |            38 |                1 |
| pdt2    | pdt2ver1 | Fra     | 2020M01W01 |     5 |       1 |             4 |                  |
| pdt2    | pdt2ver1 | Fra     | 2020M01W02 |     3 |       0 |             7 |                1 |
+---------+----------+---------+------------+-------+---------+---------------+------------------+

Я попытался добавить это к моему утверждению:

LAG(returns,1,0)
    OVER(partition by Version, Country 
      Order by Week 
      ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) previous_returns

Но это, очевидно, не так просто. Может окно? Нужно ли снова использовать раздел? Любые советы будут оценены по этому вопросу. Я использую Teradata.

1 Ответ

1 голос
/ 18 марта 2020

Это должно быть просто:

lag(returns) over(partition by version, country order by week) previous_returns
...