[英]Subtract current row from previous row, keeping previous row value as constant — SQL
表产品按产品划分的平均收入
产品 | avg_rev |
---|---|
一个 | 500 |
乙 | 400 |
C | 250 |
D | 100 |
表 product_diff,是我需要计算的地方,diff_a 作为公式 aa、ab、ac、ad 继承的另一列。
产品 | avg_rev | diff_a |
---|---|---|
一个 | 500 | 0 |
乙 | 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
来获取前一行减去当前行之间的差异,但我需要的是前一行保持不变,减去当前行一直沿用。
您需要第一个产品的 avg_rev 与当前行的avg_rev
的avg_rev
:
SELECT product,
avg_rev,
FIRST_VALUE(avg_rev) OVER (ORDER BY product) - avg_rev AS diff_a
FROM product;
请参阅演示。
结果:
产品 | avg_rev | diff_a |
---|---|---|
一个 | 500 | 0 |
乙 | 400 | 100 |
C | 250 | 250 |
D | 100 | 400 |
如果您特别想要其中一种产品,我会使用条件逻辑:
select product, avg_rev,
avg_rev - max(case when product = 'A' then avg_rev end) over () as diff_a
from product;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.