Re: Query con MIN posible sobre dos campos

From: Anthony Rafael Sotolongo León <asotolongo(at)uci(dot)cu>
To: "Jose M(dot) Mencia" <jmencia(at)alimarket(dot)es>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Query con MIN posible sobre dos campos
Date: 2014-12-19 13:29:14
Message-ID: 5494282A.2030104@uci.cu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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(at)postgresql(dot)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(at)postgresql(dot)org)
Para cambiar tu suscripcin:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Guillermo E. Villanueva 2014-12-19 13:43:35 Re: Query con MIN posible sobre dos campos
Previous Message Jose M. Mencia 2014-12-19 13:09:02 Re: Query con MIN posible sobre dos campos