Ver Mensaje Individual
  #8  
Antiguo 05-09-2008
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 585
Reputación: 23
santiago14 Va por buen camino
Lightbulb ¡¡Al fin!!

Bueno compañeros, vuelvo a agradecer su invalorable ayuda en el tema. Después de varias noches de insomnio por no poder resolver el tema he llegado a una solución viable y creo que confiable. Con gusto la comparto:

Resulta que tengo dos tablas, entre otras, una de insumos y otras de precios de esos insumos. Estos precios van variando en el tiempo por lo cual un insumo puede tener muchos precios, EN EL TIEMPO. De ahí la existencia del campo fecha_ini en la tabla de precios (listas_precios), el cual indica desde cuando tiene valor el precio para ese insumo. Bien, con eso sería:

Insumos
cod_insumo, descripcion, estado

Listas_Precios
cod_lista, cod_insumo, precio, gcia, iva, adicional_menor, fecha_ini

Lo que queremos hacer es obtener el listado de precios de los productos, pero con el precio vigente al día. Con la dinámica de los precios algunos de ellos pudieron haber cambiado ayer, anteayer, la semana pasada, el mes pasado; otros tienen previstos cambios para le lunes que viene, para el mes que viene y así. Una gran variedad por cierto.
Para obtener la lista de precios a hoy tenemos la siguiente norma: Son aquellos que su fecha de inicio de vigencia (fecha_ini) <= hoy Y que fecha_ini sea Máxima (esto porque el producto tiene muchos precios que variaron en el tiempo)

Con estas condiciones y poniendo todos los campos que se requieren mostrar la consulta queda de esta manera:

Código SQL [-]
Select i.cod_insumo, i.descripcion, gcia, lp.fecha_ini, lp.precio,
lp.adicional_menor, lp.iva
From Insumos i LEFT OUTER JOIN Listas_Precios lp ON i.cod_insumo = i.cod_insumo
Where i.cod_proveedor = :codigo --2
and i.estado_insumo = 'A'
/* Devuelve la fecha máxima de un listado de fechas menores o iguales a current_date, por cada insumo en particular */
and lp.fecha_ini in (Select MAX(lp2.fecha_ini) From listas_precios lp2
                     Where lp2.fecha_ini <= current_date
                     and i.cod_insumo = lp2.cod_insumo
                     and lp.cod_insumo = lp2.cod_insumo)

Y con esto tenemos arreglado el asunto.

Muchas gracias a todos.

Saludos.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita