Re: Generare righe "intermedie"

From: Giorgio Valoti <giorgio_v(at)mac(dot)com>
To: pgsql-it-generale <pgsql-it-generale(at)postgresql(dot)org>
Subject: Re: Generare righe "intermedie"
Date: 2008-10-28 11:27:01
Message-ID: CCAB12C4-0D1B-4E38-849C-4E3861591D50@mac.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-it-generale


On 28/ott/08, at 09:03, gabriele(dot)bartolini(at)2ndquadrant(dot)it wrote:

> Ciao Giorgio,
>
> non ti ho abbandonato. E' che la commit fest per PG 8.4 è il 1
> novembre e dobbiamo preparare una patch importante per quella data.
> Scusami.

Scusa tu! Da un certo punto di vista è più importante il commit fest ;-)

>
>
> 2008/10/27 Giorgio Valoti <giorgio_v(at)mac(dot)com>
> No, si tratta di calcolare dei valori d'interesse con
> capitalizzazione annuale; da qui l'esigenza del raggruppamento
> annuale. La prima tabella, quella con i periodi irregolari,
> restituisce i periodi con i tassi d'interesse omogenei e se non
> fosse per la capitalizzazione il discorso sarebbe chiuso.
>
> Ho ancora i rimasugli di matematica finanziaria delle superiori
> (preistoria oramai).
>
> Comunque, per orientarmi meglio, la capitalizzazione annuale la fai
> contando il numero di giorni? Inoltre, intendi avvalerti di stored
> procedure per fare il calcolo?
>
> Scusami ma magari tu stai dando per scontato (giustamente) il
> contesto, mentre personalmente io avrei bisogno di maggiori
> informazioni per aiutarti meglio.

eh lo so… è sempre un po’ un casino via mail.

Per quanto riguarda la capitalizzazione e gli interessi. Questi ultimi
li calcoli giorno per giorno, mentre la capitalizzazione avviene al
massimo ogni 12 mesi (nel mio caso), ovvero, all’inizio di ogni anno.
Per un esempio concreto (ma forse non correttissimo, visto che non
sembra tenere conto dei bisestili) puoi andare su http://www.avvocati.it/servizi/calcolo/interessi_legali.php
.

Per quanto riguarda l’uso di stored procedures. Sì, sicuramente le
userò e la ragione è proprio la capitalizzazione. Questo è un
frammento della versione che stavo abbozzando (spero non sia una
boiata) che però ha il problema a cavallo del 1990, visto che il tasso
d’interesse è stato cambiato a metà dicembre:

> for r in
> select da, a, tasso, giorni, 0 as capitale, 0 as interessi
> from
> (select p.da, p.a, tl.valore as tasso, p.a - p.da + 1 as giorni
> from
> (select da_in as da, ('31/12/'||first_year)::date as a
> union
> select
> (('01/01/'||first_year)::date + '1
> year'::interval * i)::date,
> (('31/12/'||first_year)::date + '1
> year'::interval * i)::date
> from generate_sries (1,(last_year -
> first_year)::int - 1) as i
> union
> select ('01/01/'||last_year)::date, a_in) as p
> join tasso_legale tl on (tl.da <= p.da and tl.a >=
> p.a)) as giorni
> loop
> current_interessi := r.tasso * cap * r.giorni / 365;
> r.interessi := format_num(current_interessi);
> r.capitale := format_num(cap);
> if capitalizzazione then
> cap := cap + current_interessi;
> end if;
> return next r;
> end loop;
>

dove first_year è ricavato dalla data iniziale e last_year da quella
finale e la tabella dei tassi legali è la seguente:

> da | a | valore
> ----------+------------+--------
> 1904-01-01 | 1990-12-15 | 5,00
> 1990-12-16 | 1996-12-31 | 10,00
> 1997-01-01 | 1998-12-31 | 5,00
> 1999-01-01 | 2000-12-31 | 2,50
> 2001-01-01 | 2001-12-31 | 3,50
> 2002-01-01 | 2003-12-31 | 3,00
> 2004-01-01 | 2007-12-31 | 2,50
> 2008-01-01 | 2008-12-31 | 3,00

Grazie
--
Giorgio Valoti

In response to

Browse pgsql-it-generale by date

  From Date Subject
Next Message Gianni Ciolli 2008-11-04 15:48:17 == Notiziario settimanale PostgreSQL, 2 novembre 2008 ==
Previous Message Giorgio Valoti 2008-10-28 11:08:44 Re: Generare righe "intermedie"