Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Tengo una tabla de ventas mas o menos así:
Fecha_venta, Articulo, cantidad, Precio_venta
El precio es libre, aunque existe una tarifa. Ppara comparar los precios reales de venta con la tarifa, necesito añadir un campo "precio_tarifa".
Mi problema es que la tarifa cambia en el tiempo, asi
TABLA TARIFAS:
Articulo 1 , Fecha 1, Precio 1
Artículo 1, Fecha 2, Precio 2,
Articulo 2.....
Es decir, cuando voy a buscar el precio vigente de Artículo 1 depende de la fecha de la venta, necesito la última fecha anterior a la de la venta para extraer el precio vigente.
¿Alguna sugerencia?
Hola,
Si la tabla de tarifas tiene estos campos: Articulo, FechaInicio, Tarifa, yo la leeria y le añadiria el campo FechaFinTarifa siendo esta la fecha anterior a la de Inicio de la siguiente Tarifa para ese producto, con este script:
Temp_Tarifas:
LOAD
Articulo
FechaInicioTarifa,
date(if(isnull(previous(FechaInicioTarifa)),today(),
if(previous(Articulo)<>Articulo,Today(),previous(FechaInicioTarifa)-1)),'DD/MM/YYYY') as Fecha_Fin_Tarifa,
Tarifa;
SQL SELECT * .....
Order by Articulo, FechaInicioTarifa desc ;
Tarifas:
Load *,
If(Articulo<> peek(Articulo),'01/01/2000',FechaInicioTarifa) as Fecha_Inicio_Tarifa;
Load
Articulo,
Fecha_Inicio_Tarifa,
Fecha_Fin_Tarifa,
Tarifa
Resident Temp_Tarifas
Order By Articulo, FechaInicioTarifa asc;
Drop Table Temp_Tarifas;
Esto no es necesario si en la tabla de tarifas ya tienes la fecha de fin.
Ahora tienes que saber para cada venta, que tarifa era la tarifa vigente en esa fecha. Eso lo puedes hacer con intervalmatch() con la tabla Ventas:
join intervalmatch (FechaVenta, Articulo) load Fecha_Inicio_Tarifa, Fecha_Fin_Tarifa, Articulo resident Tarifas;
LEFT JOIN (Ventas) load * RESIDENT Tarifas;
DROP TABLE Tarifas;
Espero que te ayude!
Revisa si esto puede dar solucion a tu pregunta:
Asume los siguiente datos
LOAD * INLINE [
Art, Fecha, Precio
a1, 1/11/2013, 10
a1, 5/11/2013, 11
a1, 7/11/2013, 12
a2, 1/11/2013, 5
a2, 8/11/2013, 6
a3, 1/11/2013, 8
a4, 1/11/2013, 2
a4, 4/11/2013, 3
a4, 10/11/2013, 5
];
Haces una tabla con dimesion Art y en la expresion lo siguiente:
If(IsNull(FirstSortedValue(Precio,-Aggr(Max(Fecha),Art,Fecha),2)),FirstSortedValue(Precio,-Aggr(Max(Fecha),Art,Fecha)),FirstSortedValue(Precio,-Aggr(Max(Fecha),Art,Fecha),2))
Te producira la siguiente tabla
Art PrecioVigente
a1 11
a2 5
a3 8
a4 3
Hola,
Si la tabla de tarifas tiene estos campos: Articulo, FechaInicio, Tarifa, yo la leeria y le añadiria el campo FechaFinTarifa siendo esta la fecha anterior a la de Inicio de la siguiente Tarifa para ese producto, con este script:
Temp_Tarifas:
LOAD
Articulo
FechaInicioTarifa,
date(if(isnull(previous(FechaInicioTarifa)),today(),
if(previous(Articulo)<>Articulo,Today(),previous(FechaInicioTarifa)-1)),'DD/MM/YYYY') as Fecha_Fin_Tarifa,
Tarifa;
SQL SELECT * .....
Order by Articulo, FechaInicioTarifa desc ;
Tarifas:
Load *,
If(Articulo<> peek(Articulo),'01/01/2000',FechaInicioTarifa) as Fecha_Inicio_Tarifa;
Load
Articulo,
Fecha_Inicio_Tarifa,
Fecha_Fin_Tarifa,
Tarifa
Resident Temp_Tarifas
Order By Articulo, FechaInicioTarifa asc;
Drop Table Temp_Tarifas;
Esto no es necesario si en la tabla de tarifas ya tienes la fecha de fin.
Ahora tienes que saber para cada venta, que tarifa era la tarifa vigente en esa fecha. Eso lo puedes hacer con intervalmatch() con la tabla Ventas:
join intervalmatch (FechaVenta, Articulo) load Fecha_Inicio_Tarifa, Fecha_Fin_Tarifa, Articulo resident Tarifas;
LEFT JOIN (Ventas) load * RESIDENT Tarifas;
DROP TABLE Tarifas;
Espero que te ayude!
Será muy fácil traer la tabla de origen con fecha_fin, aunque me ha sido muy ilustrativo como la has construido.
Muchas gracias.
Esta solución me sirve para saber los precios vigentes a día de hoy pero ¿y cualquier fecha intermedia? Debo de conocer el precio de tarifa por ejemplo de a1 el dia 2/11/13 que no es el precio actual