codice:
CREATE TABLE `consumo_acqua` (
`id` int(11) unsigned zerofill NOT NULL AUTO_INCREMENT,
`filiale` int(11) NOT NULL,
`anno` int(4) NOT NULL,
`mese` int(2) NOT NULL,
`nro_contatore` varchar(30) NOT NULL,
`rilevazione` decimal(8,3) NOT NULL,
PRIMARY KEY (`id`),
KEY `fil` (`filiale`) USING BTREE
);
INSERT INTO `consumo_acqua`
(`id`,`filiale`,`anno`,`mese`,`nro_contatore`,`rilevazione`)
VALUES
(NULL,'1111',2014,12,'1',100),
(NULL,'1111',2015,1,'1',120),
(NULL,'1111',2015,2,'1',130),
(NULL,'1111',2015,3,'1',140),
(NULL,'1111',2015,4,'1',150),
(NULL,'1111',2015,5,'1',160),
(NULL,'1111',2015,6,'1',170),
(NULL,'1111',2015,7,'1',180),
(NULL,'1111',2015,8,'1',190),
(NULL,'1111',2015,9,'1',200),
(NULL,'1111',2015,10,'1',210),
(NULL,'1111',2015,11,'1',220),
(NULL,'1111',2015,12,'1',230),
(NULL,'1111',2016,1,'1',240)
e una di queste query (o anche entrambe):
codice:
SELECT a.*,
(a.rilevazione - b.rilevazione) as Consumo_Mensile
FROM consumo_acqua a, consumo_acqua b
WHERE STR_TO_DATE(CONCAT('01',LPAD(b.mese,2,'0'),b.anno),'%d%m%Y') =
DATE_ADD(
STR_TO_DATE(CONCAT('01',LPAD(a.mese,2,'0'),a.anno),'%d%m%Y')
,INTERVAL -1 MONTH)
AND a.anno = 2015
ORDER BY mese ASC;
SELECT a.*,
(a.rilevazione - (SELECT rilevazione
FROM consumo_acqua b
WHERE STR_TO_DATE(CONCAT('01',LPAD(b.mese,2,'0'),b.anno),'%d%m%Y') =
DATE_ADD(
STR_TO_DATE(CONCAT('01',LPAD(a.mese,2,'0'),a.anno),'%d%m%Y')
,INTERVAL -1 MONTH)
)
) as Consumo_Mensile
FROM consumo_acqua a
WHERE a.anno = 2015
ORDER BY mese ASC
vedrai che lì funziona!!