Hola Jose, tuve un escenario similar hace un tiempo y resolví el tema con CTE y Ventanas, ajusté mi solución a lo que entendí de tu problema y me dió algo como esto:
 with tabla as (
select mitabla.idempresa, mitabla.idminsector, mitabla.minsector, mitabla.idsector, mitabla.sector, mitabla.idarea, mitabla.area,
    row_number() over ventana as rnum from mitabla
    window ventana as (partition by mitabla.idempresa, mitabla.idminsector)
)
select idempresa, idminsector, minsector, idsector, sector, idarea, area from tabla where rnum = 1;

A lo mejor debes hacer algunos ajustes a la misma, para adecuarlo a tu problema.


saludos

El 12/19/2014 a las 5:07 AM, Jose M. Mencia 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



---------------------------------------------------
XII Aniversario de la creación de la Universidad de las Ciencias Informáticas. 
12 años de historia junto a Fidel. 12 de diciembre de 2014.

-
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