Re: Agrupar una consulta con selección del primer elemento

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)

In response to

Browse pgsql-es-ayuda by date

  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