Postgres función para separar en meses en columnas

Bueno, necesitaba hacer un reporte para el SENASA en el que en cada columna haya un mes. Onda enero, febrero, etc. Entonces hice una pequeña función que me ayudará a hacerlo, es muestro como.

CREATE OR REPLACE FUNCTION meses(int,int,date,date)
RETURNS int
AS $
DECLARE
resultado int;
BEGIN
if (date_part('month',$3) = $1 or (date_part('month',$4) = $1)) then
resultado:=$2;
else
resultado:=0;
end if;
return resultado;
end;
$
LANGUAGE 'plpgsql' VOLATILE;

Esta función lo que hace es sumar el dato si la fecha correspone al mes indicado. En mi caso puede ser la fecha de control de foco o de cambio, por eso pregunta dos veces (los dos últimos cambios).

El select quedaría algo así:

select co.id_colonia,sum(meses(1,(picudos_rojos+picudos_grises),fech_ctrl,fech_cambio)) as n1,
sum(meses(2,(picudos_rojos+picudos_grises),fech_ctrl,fech_cambio)) as n2,
sum(meses(3,(picudos_rojos+picudos_grises),fech_ctrl,fech_cambio)) as n3,
sum(meses(4,(picudos_rojos+picudos_grises),fech_ctrl,fech_cambio)) as n4... from ....

Espero que les sirva.
Saludos a todos.

Tags: , ,

Comments are closed.