3

誰かが私を正しい方向に向けることができるかもしれません。前月の値に依存する「計算」列を計算する必要があるPL/pgSQL文を書く問題に直面しました。

もともと列BとCがあり、「計算」を計算する必要があります

4 行の Excel の式は次のようになります。 =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 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;
于 2013-07-29T15:00:04.750 に答える