2 列的移动平均值

问题描述 投票:0回答:3

你好,我有一个问题。我知道如何使用 Oracle 分析函数计算最近 3 个月的移动平均值...但我的情况有点不同

月份-----产品类型-----销售额---------平均(必须找到这个)

1---------A----------------10

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

1---------C----------------17

2---------A----------------21

3---------C----------------2

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

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

5

6

7

8

9

所以我们有每个月和每种产品类型的销售额...我需要计算过去 3 个月和特定产品的移动平均值。

示例:

对于第 4 个月和产品 B,将为 (21+0+12)/3

有什么想法吗?

sql oracle oracle10g
3个回答
4
投票

另一种选择是使用分析函数的窗口子句

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
投票
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

0
投票

嗨,但这只是 3 个月。我们如何计算从月初到当月的滚动平均值?

© www.soinside.com 2019 - 2024. All rights reserved.