Re: Query con MIN posible sobre dos campos

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

Muchas gracias Anthony, funciona correctamente.
Nunca había usado las "WITH queries" y veo que resuelven adecuadamente
este problema. Ahora debo probar a integrar esta solución dentro de la
capa de acceso a datos JDBC de mi aplicativo.

Gracias de nuevo.

El 19/12/14 a las 14:29, Anthony Rafael Sotolongo León escribió:
> 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.

--
José M. Mencía
Dpto. de Informática
Publicaciones Alimarket, S.A.

-
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

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Anthony Rafael Sotolongo León 2014-12-19 13:29:14 Re: Query con MIN posible sobre dos campos
Previous Message Jose M. Mencia 2014-12-19 11:07:43 Query con MIN posible sobre dos campos