Sql Oracle获取当前组和上一组(分区)的平均值差异
我正在使用Oracle 12.1.0.2.0 我想要当前grouppartition的平均值与上一个grouppartition的平均值之差 我获取当前组平均值的代码是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 )
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