Skip site navigation (1) Skip section navigation (2)

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search archives
  Advanced Search

Re: Generare righe "intermedie"




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



Home | Main Index | Thread Index

Privacy Policy | About PostgreSQL
Copyright © 1996 – 2012 PostgreSQL Global Development Group