José saliendo un poco del tema consultado, si es una tabla muy grande, te
sugiero que revises el diseño.

Guillermo Villanueva


El 19 de diciembre de 2014, 8:07, Jose M. Mencia <jmen...@alimarket.es>
escribió:

> 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