尝试计算列的值,其中该值是根据前一行的计算值进行计算的。(如下图所示)
其中列Z是X*Y的乘积,在没有前一行的情况下,Y列的值应为1,否则该值应为前一Z列值。
这可以使用游标来实现,但尝试使用SQL查询来查找它。
发布于 2018-05-30 18:51:57
我认为最简单的方法根本不使用lag()
或子查询。一种方法是简单的除法:
SELECT a, x, y
( EXP(SUM(LN(x * y)) OVER (ORDER BY a)) ) / (x * y) as z
FROM t;
或者将window子句与coalesce()
一起使用
SELECT a, x, y
COALESCE( EXP(SUM(LN(x * y)) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)), 1 ) as z
FROM t;
https://stackoverflow.com/questions/50600691
复制相似问题