Soy nuevo en el foro y pido de antemano disculpas si no me expreso adecuadamente o publico mis dudas en un aparatado donde no corresponde.
Llevo unos días intentanto hacer una consulta con la función crosstab del tipo:
Código SQL:
Ver original
SELECT almodovar_dato.* FROM crosstab('SELECT i.descriptor, min(if.fecha) as final,max(if.fecha) as final, to_char(if.fecha, ''mon'')::text As bucket, round(AVG(if.dato),5)::numeric As media FROM public.descriptor As i INNER JOIN public.almodovar_dato As if ON i.id_descriptor::text = if.id_descriptor::text WHERE if.fecha >= ''2008-10-01'' and if.fecha <= ''2012-09-30 23:59'' AND i.id_descriptor=1 GROUP BY if.fecha >= ''2008-10-01'' and if.fecha <= ''2012-09-30 23:59'',i.descriptor,i.id_descriptor,if.fecha HAVING fecha between date ''2008-10-01'' and date ''2009-09-30 23:59'' ORDER BY extract(year from fecha),fecha BETWEEN date ''2008-10-01'' and date ''2012-09-30 23:59'',if.fecha,i.id_descriptor', 'SELECT to_char(date ''2008-10-01'' + (n || '' month'')::interval, ''mon'') As short_mname FROM generate_series(0,11) n') AS almodovar_dato(descriptor text, inicio text,final text, octubre NUMERIC, noviembre NUMERIC, diciembre NUMERIC, enero NUMERIC, febrero NUMERIC, marzo NUMERIC, abril NUMERIC, mayo NUMERIC, junio NUMERIC, julio NUMERIC, agosto NUMERIC, septiembre NUMERIC)
La tabla contiene los datos de un embalse (cota,volumen,precipitación...) y cada dato lleva asociada una fecha en que se realizó la medida. En la consulta mostrada, obtengo la media de un dato en concreto(volumen por ejemplo) para cada mes de un año en concreto, ejemplo 2009. Mi pregunta es si es posible obtener tantos registros como años tengo de manera que un misma consulta obtenga la media del volumen de cada mes del año 2007, en otra línea la del 2008 y así sucesivamente.
He intentado hacerlo con GROUP BY y con HAVING pero no logro sacarlo. Y también lo hice con UNION pero no lo quiero de esta forma si no en la misma función crosstab.
Gracias de antemano a tod@s y de nuevo disculpen si no he sido claro con mi pregunta.