función para obtener registros por rangos

From: Cesar A <cesar(dot)carbonara(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: función para obtener registros por rangos
Date: 2010-05-19 14:20:44
Message-ID: AANLkTin50oNAzacYWUPc_k7a7EMfIepmK2SaiPQwDhrj@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2010-05-19 14:51:09 Re: [pgsql-es-ayuda] función para obtener registros por rangos
Previous Message Ing. Yunior Mesa Reyes 2010-05-19 13:51:07 Abierta inscripción para Cursos de Verano en la UCI...!!!