Sql Oracle获取当前组和上一组(分区)的平均值差异

Sql Oracle获取当前组和上一组(分区)的平均值差异,sql,oracle,analytic-functions,Sql,Oracle,Analytic Functions,我正在使用Oracle 12.1.0.2.0 我想要当前grouppartition的平均值与上一个grouppartition的平均值之差 我获取当前组平均值的代码是 with rws as ( select rownum x, mod(rownum, 2) y from dual connect by level <= 10 ), avgs as ( select x, y, avg(x) over (partition by y) mean from rws )

我正在使用Oracle 12.1.0.2.0 我想要当前grouppartition的平均值与上一个grouppartition的平均值之差 我获取当前组平均值的代码是

    with rws as (
  select rownum x, mod(rownum, 2) y from dual connect by level <= 10
), avgs as (
  select x, y, avg(x) over (partition by y) mean from rws
)
  select x, y, mean
  from avgs;
现在我想要的是:

X Y MEAN PREV_MEAN MEAN_DIFF 4 0 6 8 0 6 2 0 6 6 0 6 10 0 6 9 1 5 6 -1 7 1 5 3 1 5 1 1 5 5 1 5 2 2 3 5 -3 3 2 3 5 2 3 1 2 3 4 2 3 平均此分区组-平均上一分区组 在这种情况下,我需要5-6来计算组平均差列

还有,我怎样才能得到平均差总是w.r.t第一组。 在上面的例子中,我需要5-6和3-6

您能提供帮助吗?

使用函数lag和ignore nulls子句:

测试:

输出:

ID   VAL      AV       DIFF
---  -------  -------  -------
1     44.520   47.676   
1     47.760
1     50.107        
1     48.353        
1     47.640    
2     48.353   48.696     1.02
2     50.447        
2     51.967        
2     45.800    
2     46.913
使用函数lag with ignore nulls子句:

测试:

输出:

ID   VAL      AV       DIFF
---  -------  -------  -------
1     44.520   47.676   
1     47.760
1     50.107        
1     48.353        
1     47.640    
2     48.353   48.696     1.02
2     50.447        
2     51.967        
2     45.800    
2     46.913

什么是上一个分区组?请提供样本数据和预期结果。示例数据不使用代码段中的列。不清楚代码和数据之间的关系是什么。以前的分区组是什么?请提供样本数据和预期结果。示例数据不使用代码段中的列。目前还不清楚你的代码和数据之间的关系是什么。我们能在没有内部查询的情况下实现这一点吗?我怀疑。我们得到ORA-30483:如果我们尝试使用平均延迟,这里不允许使用窗口函数。您可以将内部查询移动到带有零件的CTE。我们是否可以在没有内部查询的情况下实现这一点?我怀疑。我们得到了ORA-30483:如果我们尝试在平均值上使用滞后,这里不允许使用窗口函数。您可以将内部查询移动到带有部分的CTE。
ID   VAL      AV       DIFF
---  -------  -------  -------
1     44.520   47.676   
1     47.760
1     50.107        
1     48.353        
1     47.640    
2     48.353   48.696     1.02
2     50.447        
2     51.967        
2     45.800    
2     46.913