Guarda su sqlfiddle usando:
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!!

Quindi guarda bene dove è il problema con il tuo DB. Ma su questo non credo di poterti aiutare.
Ciao