Mario Ulloa escribió:
> Estimados tengo una lista de registro la cual debo resumir por valores 
> consecutivos, en este caso, en el numero de cajael resultado que tengo actual 
> de mi sql es:
> lote_completo      |cod_guia|caja inicial   |caja final   |count|des_prod     
>   150731012521301|42012    |50434          |50507       |66   |MERLUZA DEL 
> SUR150731012521201|41934    |50498          |50502       |5    |MERLUZA DEL 
> SUR150731012521101|42010    |50503          |50505       |3    |MERLUZA DEL 
> SUR
> y lo que se espera es el resultado de mas abajo: debido a que para la guía 
> 42012 hay un salto de la caja 50497 a la 50506.El orden del listado lo dan 
> las cajas de menor a mayor,.
> lote_completo      |cod_guia|caja inicial   |caja final   |count|des_prod     
>   
> 150731012521301|      42012|  50434  |        50497|  64 |MERLUZA DEL 
> SUR150731012521201|     41934|  50498  |        50502|  5  |MERLUZA DEL 
> SUR150731012521101|     42010|  50503  |        50505|  3  |MERLUZA DEL 
> SUR150731012521301|     42012|  50506  |        50507|  2  |MERLUZA DEL SUR
> la consulta que llevo por el momento es:
> Select substring(to_char(packing_acum.lote,'FM9999999999') from 3 for 7) 
> ||case when to_char(packing_acum.cod_prod,'FM9999') < '10' THEN 
> '0'||to_char(packing_acum.cod_prod,'FM9999') ELSE 
> to_char(packing_acum.cod_prod,'FM9999')end || 
> to_char(packing_acum.cod_pesaje,'FM99999999')||'0'||to_char(packing.tipo,'FM9999')
>  as lote_completo,m_pesaje.cod_guia,
> min(packing_acum.corr),max(packing_acum.corr),count(packing_acum.corr),producto.des_prod
>  ,case when packing.tipo = 1 THEN 'ENFRIADO REFRIGERADO' ELSE 'CONGELADO' end 
> as estado_fresco_o_congelado 
> From m_pesaje inner join ( producto inner join (packing inner join 
> packing_acum       on packing.cod_packing = packing_acum.cod_packing)      on 
> packing_acum.cod_prod = producto.cod_prod)   on packing_acum.cod_pesaje = 
> m_pesaje.cod_pesaje where  packing_acum.estado = 5668 and 
> packing_acum.cod_prod <> 0 group by lote_completo, m_pesaje.cod_guia, 
> producto.des_prod,estado_fresco_o_congelado,packing_acum.lote
> order by      min(packing_acum.corr),max(packing_acum.corr)
> espero se entiendo, muchas gracias.,                                    

Creo que lo que tienes que hacer es dividir cada guía en muchas cajas
(es decir un join con generate_series, o algo de ese tipo, de manera que
cada guía retorne un conjunto de filas), luego hacer un join de las
cajas con el intervalo definido por "caja inicial" y "caja final"; luego
haces una agregación que retorne guías agrupadas en grupos consecutivos
de cajas.  El problema completo se ve muy difícil, pero si consideras un
paso a la vez, cada paso parece razonable de atacar.

Ahora, lo cierto es que no está claro que el modelo de datos sea
realmente adecuado.  Quizás deberías considerar la idea de modelar un
poco mejor antes de almacenar (en terminología ETL, un poco de T antes
de L).

Espero se entiendo ...

-- 
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

-
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