3

也许有人可以指出我正确的方向。我遇到了编写 PL/pgSQL 语句的问题,我需要计算取决于上个月值的“计算”列。

最初我有 B 和 C 列,需要计算“计算”

excel 中 4 行的公式如下所示: =C4/(B4+OFFSET(D4;-1;0))

行月BC计算
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 函数,但那些只能引用“真实”列而不是计算本身。

ps 这是样本数据和公式,真实的要复杂得多。

如有任何问题/想法,我将不胜感激

4

1 回答 1

2

好吧,我认为您可以使用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

另一种方法是创建自己的自定义聚合 SQL FIDDLE 示例

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;
于 2013-07-29T15:00:04.750 回答