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 >