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