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@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a