Agrupar una consulta con selección del primer elemento

From: "I(dot)N(dot)T(dot) - Programación" <dpto(dot)programacion(at)grupo-int(dot)com>
To: POSTGRESQL - Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Agrupar una consulta con selección del primer elemento
Date: 2009-01-29 16:35:15
Message-ID: 4981DAC3.1070003@grupo-int.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Buenas tardes,

Tengo las 3 tablas:

CREATE TABLE socios
(
id_socio integer NOT NULL DEFAULT nextval('"socios_seq"'::text),
nombre character varying(250),
dni character varying(250),
etc...

CREATE TABLE tarjetas_socios
(
id_tarjeta integer NOT NULL DEFAULT 0,
id_socio integer NOT NULL DEFAULT 0
)

CREATE TABLE tarjetas
(
id_tarjeta integer NOT NULL DEFAULT nextval('"tarjetas_seq"'::text),
id_tienda integer DEFAULT 0,
etc...

Y tengo la siguiente consulta:

CREATE OR REPLACE VIEW view_socios AS
SELECT socios.nombre, socios.dni, 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;

Al ejecutar la vista muestra algo como:

nombre dni id_tienda
-------------------------------------
LUIS 123456 15
LUIS 123456 11
LUIS 123456 47
ANDRES 987654 12
ANDRES 987654 15
MIGUEL 555555 7

etc...

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. ¿No existe una consulta en PostgreSQL del tipo ...

CREATE OR REPLACE VIEW view_socios AS
SELECT socios.nombre, socios.dni, 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, first(tarjetas.id_tienda);

... (como en access, ¡¡¡lo siento!!!)? ¿Y de alguna otra forma?

Gracias de antemano por vuestra ayuda

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Javier Chávez B. 2009-01-29 16:36:06 Re: [pgsql-es-ayuda] Agrupar una consulta con selección del primer elemento
Previous Message Emanuel Calvo Franco 2009-01-29 16:26:08 Re: [?? Probable Spam] Ayuda sobre error en postgre