Saludos Tengo una tabla que, entre otras cosas, tiene: Cantidad de hombres, mujeres, por edad (0, 1, 2..99)
Tengo una consulta que me devuelve cantidad de hombres y mujeres por un rango de edad, algo como: hombres | mujeres | edad ---------+---------+------ 36145 | 34599 | 0-4 Donde la unitaria es: hombres | mujeres | edad ---------+---------+------ 6198 | 5878 | 0 7562 | 7248 | 1 7513 | 7213 | 2 7461 | 7161 | 3 7411 | 7099 | 4 (5 filas) Necesito tener la lista, por rangos de 5, hasta el máximo de edad existente, lo que tengo: CREATE OR REPLACE FUNCTION rangos_edad (anio integer) RETURNS SETOF record AS $$ DECLARE l record; i int2 := 0; j int2 := 4; BEGIN FOR l IN SELECT sum(t1.hombres),sum(t1.mujeres),(min(t1.edad)||' - '||max(t1.edad))::text FROM ( SELECT SUM(dem01_005) AS hombres, SUM(dem01_006) AS mujeres, dem01_004 AS edad FROM dem01 WHERE dem01_002 = '$1' GROUP BY dem01_004 HAVING dem01_004 >= i AND dem01_004 <= j ORDER BY dem01_004 ) AS t1 LOOP RETURN NEXT l; i := i+5; j := j+5; END LOOP; END; $$ Language 'plpgsql'; Pero no furula... al hacer una consulta, me devuelve: SELECT * FROM rangos_edad(2000) as (t varchar, a int, b int, c smallint); ERROR: wrong record type supplied in RETURN NEXT CONTEXT: PL/pgSQL function "rangos_edad" line 18 at RETURN NEXT Leí que el error se debe a que la definición de las columnas de retorno debe ser exacta, pero no doy... En la tabla, la edad es un smallint, cantidad de hombres y mujeres son integer... el año que utilizo para la consulta, está como varchar(4) pues sólo se guarda el año Ideas? -- -- Sí no eres parte de la solución... eres parte del problema. Les Luthiers -- Cesar A. Carbonara R. C.I. Nº V.11.952.572 -- Usuario Linux 377997 www.gulmer.org.ve Debian... todo lo que siempre has querido