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

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 (view raw or flat)
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

pgsql-it-generale by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group