codice:
drop table if exists `contratti`;
create table `contratti` (
`idcontratto` int(11) not null auto_increment,
`nomecontratto` varchar(50) default null,
`datacontratto` date default null,
`nomeamministrazione` varchar(50) default null,
`valoreeconomico` decimal(10,2) default null,
primary key (`idcontratto`)
) engine=myisam auto_increment=5 default charset=latin1;
/*Data for the table `contratti` */
insert into `contratti`(`idcontratto`,`nomecontratto`,`datacontratto`,`nomeamministrazione`,`valoreeconomico`) values (1,'contratto1','2009-05-12','Amministrazione1','100.00');
insert into `contratti`(`idcontratto`,`nomecontratto`,`datacontratto`,`nomeamministrazione`,`valoreeconomico`) values (2,'contratto2','2010-01-15','Amministrazione2','100.00');
insert into `contratti`(`idcontratto`,`nomecontratto`,`datacontratto`,`nomeamministrazione`,`valoreeconomico`) values (3,'contratto3','2008-11-01','Amministrazione3','100.00');
insert into `contratti`(`idcontratto`,`nomecontratto`,`datacontratto`,`nomeamministrazione`,`valoreeconomico`) values (4,'contratto4','2001-01-01','Amministrazione4','100.00');
/*Table structure for table `interi` */
drop table if exists `interi`;
create table `interi` (
`i` tinyint(4) default null
) engine=myisam default charset=latin1;
/*Data for the table `interi` */
insert into `interi`(`i`) values (0);
insert into `interi`(`i`) values (1);
insert into `interi`(`i`) values (2);
insert into `interi`(`i`) values (3);
insert into `interi`(`i`) values (4);
insert into `interi`(`i`) values (5);
insert into `interi`(`i`) values (6);
insert into `interi`(`i`) values (7);
insert into `interi`(`i`) values (8);
insert into `interi`(`i`) values (9);
/*Table structure for table `percentuali` */
drop table if exists `percentuali`;
create table `percentuali` (
`id` int(11) not null auto_increment,
`anno` int(11) default null,
`percentuale` tinyint(4) default null,
primary key (`id`)
) engine=myisam auto_increment=3 default charset=latin1;
/*Data for the table `percentuali` */
insert into `percentuali`(`id`,`anno`,`percentuale`) values (1,2009,5);
insert into `percentuali`(`id`,`anno`,`percentuale`) values (2,2010,7);
select a.annoAttualizzazione, c.*
from (
select 2000 + c.i*100 + d.i*10 + u.i as annoAttualizzazione
from interi as c
join interi as d
join interi as u
where ( c.i*100 + d.i*10 + u.i ) < 100
) a
inner join contratti as c on ((a.annoAttualizzazione >= year(c.datacontratto)) and (a.annoAttualizzazione <= year(curdate()))) order by c.idcontratto,a.annoAttualizzazione;
Con una funzione dovrebbe essere possibile aggiungere il campo calcolato che ti manca.