Trata de no complicar tanto los cálculos. Puedes tomar esto como base; lo hice hace algunos años para un desarrollo y todavía está en uso.
El objetivo era establecer cuánto tiempo había pasado entre dos fechas, tomando la diferencia en segundos entre ambas.
Código MySQL:
Ver originalDELIMITER $$
SET TOTALSEG
= TOTALSEG
% 86400; SET TOTALSEG
= TOTALSEG
% 3600; SET SEGUNDO
= TOTALSEG
% 60; SET TIEMPO
=CONCAT(DIA
, ' D. ', HORA
, ' hs. ', MINUTO
,' min. ', SEGUNDO
,' seg.'); RETURN TIEMPO;
DELIMITER ;
Te dejo esta base para que tu resuelvas la parte de años y meses.