Hola,
completando un poco lo comentado, para saber los datos de los ultimos 13 meses ( o los que quieras ) con una llamada única independientemente de la fecha de la ejecución, utilizaríamos lo siguente:
Código SQL
[-]
select
CLIENTE.CODIGO, CLIENTE.NOMBRE,
SUM(FACTURA.TOTAL) AS TOTAL,
sum( case when FACTURA.FECHA between dateadd( month , -3, current_date - EXTRACT(DAY FROM current_date) + 1) and
dateadd( month , -2, current_date - EXTRACT(DAY FROM current_date) + 1)
then FACTURA.TOTAL else 0 end ) as Mes_2,
sum( case when FACTURA.FECHA between dateadd( month , -2, current_date - EXTRACT(DAY FROM current_date) + 1) and
dateadd( month , -1, current_date - EXTRACT(DAY FROM current_date) + 1)
then FACTURA.TOTAL else 0 end ) as Mes_1,
sum( case when FACTURA.FECHA between dateadd( month , -1, current_date - EXTRACT(DAY FROM current_date) + 1) and
dateadd( month , 0, current_date - EXTRACT(DAY FROM current_date) + 1)
then FACTURA.TOTAL else 0 end ) as Mes_Actual
from FACTURAS
inner join Clientes on ( Clientes.CODIGO = Factura.COdigoCliente)
where
Factura.fecha between current_date -365 and current_Date
group by
CLIENTE.CODIGO, CLIENTE.NOMBRE
Código SQL
[-]current_date - EXTRACT(DAY FROM current_date) + 1
da el primer día del mes actual, al que le voy restando meses con la función DATEADD().
Tengase en cuenta que se deberán poner tantas columnas como se desee, teniendo en cuenta que luego en le filtro habrá que hacer coincidir el nº de días con la profundidad hacia atrás que queramos conseguir ( en este caso 365 días , tendría que haber puesto 12 columnas correspondientes a 12 meses).
Abuelete, ten en cuenta que con esta consulta no tendrás que construir la consulta dinámicamente ni tener en cuenta el año, simplemente tendrás que ajustar los nombres de las columnas.
Otra cosa, por simplificar he puesto la condición between, deberá ser
fecha >= fecha_primer_dia_del mes and fecha < fecha_primer_dia_del_mes_siguiente
A prtir de aquí se puede hacer cualquier cosa que se imagine pivotando sobre esta idea y ajustando las condiciones a lo que queramos.
Espero que te valga.
Un saludo