Query con MIN posible sobre dos campos

From: "Jose M(dot) Mencia" <jmencia(at)alimarket(dot)es>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Query con MIN posible sobre dos campos
Date: 2014-12-19 11:07:43
Message-ID: 549406FF.5040609@alimarket.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Buenos días a todos desde Madrid,
les planteo un consulta que no consigo plantear para obtener un único
registro por cada elemento empresa.

Imaginen una tabla definida y alimentada así:

drop table if exists mitabla;
create temp table mitabla (
idempresa integer,
idminsector integer,
minsector text,
idsector integer,
sector text,
idarea integer,
area text);

insert into mitabla values (208560,184,'Distrib. Alimentaria
Mayorista',24,'Cash & Carry',1,'Alimentación');
insert into mitabla values (208560,184,'Distrib. Alimentaria
Mayorista',49,'Distrib. Base Alimentaria Mayorista',1,'Alimentación');
insert into mitabla values (208560,184,'Distrib. Alimentaria
Mayorista',12,'Centrales de Compra',3,'Comercial');
insert into mitabla values (200152,360,'Informática para
Hostelería',79,'Equipamiento para Hoteles',5,'Hoteles');
insert into mitabla values (200152,360,'Informática para
Hostelería',53,'Equipamiento para Restauración',11,'Restauración');

Necesito obtener un único registro (mínimo id) por idempresa e
idminsector. Los resultados que espero obtener son:

208560 - 184 - 'Distrib. Alimentaria Mayorista' - 24 - 'Cash & Carry' -
1 - 'Alimentación'
200152 - 360 - 'Informática para Hostelería' - 79 - 'Equipamiento para
Hoteles' - 5 - 'Hoteles'

Hasta ahora sólo tengo esta aproximación pero la veo muy poco eficiente
en la BD real con 140000 registros aprox.

select mitabla.idempresa, mitabla.idminsector, mitabla.minsector,
mitabla.idsector, mitabla.sector, mitabla.idarea, mitabla.area
from mitabla
where (mitabla.idempresa, mitabla.idminsector, mitabla.idsector) =
(select tabsector.idempresa, tabsector.idminsector,
min(tabsector.idsector) as idsector
from mitabla as tabsector
where (tabsector.idempresa, tabsector.idminsector, tabsector.idarea) =
(select tabarea.idempresa, tabarea.idminsector,
min(tabarea.idarea) as idarea
from mitabla as tabarea
where mitabla.idempresa = tabarea.idempresa
and mitabla.idminsector = tabarea.idminsector
group by tabarea.idempresa, tabarea.idminsector)
group by tabsector.idempresa, tabsector.idminsector);

¿Alguna sugerencia, please?

Muchas gracias de antemano.

PD: postgresql 9.3

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripcin:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jose M. Mencia 2014-12-19 13:09:02 Re: Query con MIN posible sobre dos campos
Previous Message Guillermo E. Villanueva 2014-12-18 22:18:10 Re: Seq Scan