从前一行减去当前行,保持前一行值不变——SQL

问题描述

餐桌产品按产品划分的平均收入

产品 avg_rev
A 500
B 400
C 250
D 100

表 product_diff,是我需要计算的地方,diff_a 作为另一列,公式 a-a、a-b、a-c、a-d 延续。

产品 avg_rev diff_a
A 500 0
B 400 100
C 250 250
D 100 400

到目前为止我的查询select product,avg_rev,lag(avg_rev,1) over (order by product) as prevIoUs_value from product;

我可以通过说 prevIoUs_value-avg_rev 来计算前一行减去当前行之间的差异,但我需要的是前一行是恒定的,减去当前行一直结转。

解决方法

您需要第 1 个产品的 avg_rev 与当前行的 avg_rev 的差:

SELECT product,avg_rev,FIRST_VALUE(avg_rev) OVER (ORDER BY product) - avg_rev AS diff_a 
FROM product;

参见demo
结果:

产品 avg_rev diff_a
A 500 0
B 400 100
C 250 250
D 100 400
,

如果您特别想要其中一种产品,我会使用条件逻辑:

select product,avg_rev - max(case when product = 'A' then avg_rev end) over () as diff_a
from product;