Ver Mensaje Individual
  #19  
Antiguo 27-04-2014
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Reputación: 22
fjcg02 Va camino a la fama
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,

/* a partir de  aqui se ponen las columnas que se quieran */
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 /* ajustar los días a restar al nº de columnas */
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
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita