Re: return modified data from a function

From: Rodrigo De León <rdeleonp(at)gmail(dot)com>
To: pgsql-novice(at)postgresql(dot)org
Subject: Re: return modified data from a function
Date: 2007-05-13 21:05:26
Message-ID: 1179090326.160191.161710@l77g2000hsb.googlegroups.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice

Raimon Fernandez ha escrito:
> Hi,
>
> We have a table for an account system:
>
> table:
> compte
>
>
> fields:
> detail => varchar
> deure => float
> haver => float
>
>
> some data:
>
> detail: Entrada
> deure: 0
> haver: 5000
>
> detail: Sortida
> deure: 100
> haver: 0
>
> detail: Comptes
> deure: 150
> haver: 0
>
> detail: Varis
> deure: 35
> haver: 0
>
>
> We want to retrieve all this records, with an extra column with the
> difference from deure-haver, like this:
>
>
> Entrada 0 5000 5000
> Sortida 100 0 4900
> Comptes 150 0 4750
> Varis 35 0 4715
>
> We tried using functions, with a cursor, and add an extra column or
> tried to create a view, but without success ...
>
> We have a workaround using our frontend, and there we calculate the
> difference, but we want to do it from PostgreSQL.
>
> It's easy to do it ?
>
>
> thanks in advance,
>
> regards,
>
>
> raimon fernandez
> barcelona

I believe you need some kind of sequence for the transactions, to
control ordering (and maybe some kind of timestamp, but let's just use
the sequence for this example):

CREATE TABLE compte
(
detail VARCHAR,
deure FLOAT,
haver FLOAT,
seq serial PRIMARY KEY
);

INSERT INTO compte VALUES('Entrada', 0, 5000);
INSERT INTO compte VALUES('Sortida', 100, 0);
INSERT INTO compte VALUES('Comptes', 150, 0);
INSERT INTO compte VALUES('Varis', 35, 0);

SELECT a.*
, COALESCE((SELECT haver - deure
FROM compte
WHERE seq = 1)
+ (SELECT SUM(haver - deure)
FROM compte
WHERE seq >1
AND seq <= a.seq), 0) AS difference
FROM compte a

In response to

Responses

Browse pgsql-novice by date

  From Date Subject
Next Message Rodrigo De León 2007-05-14 05:32:51 Re: return modified data from a function
Previous Message Dusan PESL 2007-05-13 14:37:26 problem - group by