也许有人可以指出我正确的方向。我遇到了编写PL / pgSQL句子的问题,我需要计算“计算”列,这取决于前一个月的值。
最初我有B列和C列,需要计算“计算”
excel for 4 row中的公式如下所示:=C4/(B4+OFFSET(D4;-1;0))
Row month B C Calculation 3 2012.02.01 1 15 13,20 4 2012.03.01 6 26 1,32 5 2012.04.01 8 21 2,29 6 2012.05.01 10 31 2,54 7 2012.06.01 11 10 0,72
也许有人有任何想法如何实现这一目标。我知道LAG和LEAD函数,但那些只能引用“实际”列而不是计算本身。
p.s这是样本数据和公式,真正的一个要复杂得多。
我会感谢任何问题/想法
答案 0 :(得分:1)
我认为你可以使用RECURSIVE CTE:
with recursive CTE_R as
(
select T.Row, T.month, T.B, T.C, 13.2 as Calculation
from temp as T
where T.Row = 3
union all
select T.Row, T.month, T.B, T.C, T.C / (T.B + C.Calculation) as Calculation
from CTE_R as C
inner join temp as T on T.Row = C.Row + 1
)
select *
from CTE_R
另一种方法是创建自己的custom aggregate SQL FIDDLE EXAMPLE:
create function aggr_test_func(decimal(29, 10), int, int)
returns decimal(29, 10)
language SQL as
$func$
select $3 / ($2 + $1)
$func$;
create aggregate aggr_test (int, int)
(
sfunc = aggr_test_func,
stype = decimal(29, 10),
initcond = 0
);
select *, aggr_test(B, C) over (order by row asc) as Calculation
from test;