Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Agrupar registros con la función Crosstab

Estas en el tema de Agrupar registros con la función Crosstab en el foro de PostgreSQL en Foros del Web. Buenas a tod@s: Soy nuevo en el foro y pido de antemano disculpas si no me expreso adecuadamente o publico mis dudas en un aparatado ...
  #1 (permalink)  
Antiguo 13/08/2013, 03:53
 
Fecha de Ingreso: agosto-2013
Mensajes: 2
Antigüedad: 10 años, 8 meses
Puntos: 0
Mensaje Agrupar registros con la función Crosstab

Buenas a tod@s:

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
  1. SELECT almodovar_dato.*
  2.         FROM
  3.     crosstab('SELECT i.descriptor, min(if.fecha) as final,max(if.fecha) as final, to_char(if.fecha, ''mon'')::text As bucket,
  4.             round(AVG(if.dato),5)::numeric As media
  5.  
  6.    
  7.     FROM public.descriptor As i INNER JOIN public.almodovar_dato As if
  8.         ON i.id_descriptor::text = if.id_descriptor::text
  9.  
  10. WHERE if.fecha >= ''2008-10-01'' and if.fecha <= ''2012-09-30 23:59'' AND i.id_descriptor=1
  11.  
  12. GROUP BY if.fecha >= ''2008-10-01'' and if.fecha <= ''2012-09-30 23:59'',i.descriptor,i.id_descriptor,if.fecha
  13.  
  14. HAVING fecha between date ''2008-10-01'' and date ''2009-09-30 23:59''
  15.  
  16. ORDER BY extract(year from fecha),fecha BETWEEN date ''2008-10-01'' and date ''2012-09-30 23:59'',if.fecha,i.id_descriptor',
  17.  
  18.     'SELECT to_char(date ''2008-10-01'' + (n || '' month'')::interval, ''mon'') As short_mname
  19.         FROM generate_series(0,11) n')
  20. AS almodovar_dato(descriptor text, inicio text,final text, octubre NUMERIC, noviembre NUMERIC, diciembre NUMERIC,
  21.             enero NUMERIC, febrero NUMERIC, marzo NUMERIC, abril NUMERIC,
  22.             mayo NUMERIC, junio NUMERIC, julio NUMERIC, agosto NUMERIC,
  23.             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.

Última edición por gnzsoloyo; 13/08/2013 a las 12:58

Etiquetas: agrupar, as, registros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:17.