Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group