Скользящее среднее из 2 столбцов - PullRequest
2 голосов
/ 04 ноября 2010

Здравствуйте, у меня есть проблема. Я знаю, как рассчитать скользящее среднее за последние 3 месяца, используя аналитические функции оракула ... но моя ситуация немного отличается

Месяц ----- ProductType ----- Продажи ---------- Средний (ДОЛЖЕН НАЙТИ ЭТО)

1 --------- --------------- 10

1 --------- B --------------- 12

1 --------- С --------------- 17

2 --------- --------------- 21

3 --------- С --------------- 2

3 --------- B --------------- 21

4 --------- B --------------- 23

5

6

7

8

9

Таким образом, у нас есть продажи для каждого месяца и каждого типа продукта ... Мне нужно вычислить скользящее среднее за последние 3 месяца и конкретный продукт.

пример:

Для месяца 4 и Продута B это будет (21 + 0 + 12) / 3

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 04 ноября 2010

Другим вариантом является использование предложения по управлению окнами аналитических функций

with my_data as (
  select 1 as month, 'A' as product, 10 as sales from dual union all
  select 1 as month, 'B' as product, 12 as sales from dual union all
  select 1 as month, 'C' as product, 17 as sales from dual union all
  select 2 as month, 'A' as product, 21 as sales from dual union all
  select 3 as month, 'C' as product, 2 as sales from dual union all
  select 3 as month, 'B' as product, 21 as sales from dual union all
  select 4 as month, 'B' as product, 23 as sales from dual 
)
select 
  month, 
  product, 
  sales,
  nvl(sum(sales) 
    over (partition by product order by month 
          range between 3 preceding and 1 preceding),0)/3 as average_sales
from my_data
order by month, product
3 голосов
/ 04 ноября 2010
SELECT month, 
       productType, 
       sales,
       (lag(sales, 3) over (partition by produtType order by month) +
        lag(sales, 2) over (partition by productType order by month) + 
        lag(sales, 1) over (partition by productType order by month)/3 moving_avg
  FROM your_table_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...