From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | I(dot)N(dot)T(dot) - Programación <dpto(dot)programacion(at)grupo-int(dot)com> |
Cc: | POSTGRESQL - Ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Agrupar una consulta con selección del primer elemento |
Date: | 2009-01-29 17:11:18 |
Message-ID: | 20090129171118.GA3444@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
"I.N.T. - Programación" escribió:
> Necesitaría que el resultado de la vista fuera algo como:
>
> nombre dni id_tienda
> -------------------------------------
> LUIS 123456 15
> ANDRES 987654 12
> MIGUEL 555555 7
>
> etc...
>
> Es decir, teniendo en cuenta el agrupamiento por los 2 primeros campos y
> CUALQUIER VALOR del tercero (el primero, el último, da igual), pero que
> no duplique al socio.
Puedes crear una funcion de agregacion "first" que te retorne lo que
quieres. Por ej.
create function first_int(anyelement, anyelement) returns anyelement
as $$ select coalesce($1, $2); $$ language sql;
create aggregate first(anyelement) (sfunc = first_int, stype = anyelement);
Y luego deberia funcionar:
CREATE OR REPLACE VIEW view_socios AS
SELECT socios.nombre, socios.dni, first(tarjetas.id_tienda)
FROM socios, tarjetas_socios, tarjetas
WHERE socios.id_socio = tarjetas_socios.id_socio AND
tarjetas_socios.id_tarjeta = tarjetas.id_tarjeta
GROUP BY socios.nombre, socios.dni, tarjetas.id_tienda;
--
Alvaro Herrera http://www.advogato.org/person/alvherre
"El sudor es la mejor cura para un pensamiento enfermo" (Bardia)
From | Date | Subject | |
---|---|---|---|
Next Message | Javier Chávez B. | 2009-01-29 17:21:01 | Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Agrupar una consulta con selección del primer elemento |
Previous Message | Conrado Blasetti | 2009-01-29 17:07:45 | RE: Ayuda para determinar si un valor es numerico |