Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Historial de precios con SQL (https://www.clubdelphi.com/foros/showthread.php?t=76618)

mRoman 14-11-2011 00:25:01

Historial de precios con SQL
 
Hola amigos del foro, nuevamente pidiendo su ayuda para dar con algunas ideas de como solucionar una consulta q a continuación les describo:

Trabajo con Delphi6 y Firebird 1.5.

Tengo una tabla donde registro PRODUCTOS a distribuir mismos que se venden el mismo dia de su distribucion. Los campos de las tablas que intervienen en la consulta, son los siguientes:

PRODUCTO_DISTRIBUIDO
(pk)cve_producto
(pk)fecha_distribucion
(pk)cve_cliente

CLIENTE
(pk)cve_cliente
descripcion
cve_tipo_cliente

PRODUCTO
cve_producto
descricpion

PRODUCTO_PRECIO (aqui guardo un historico de precios del producto)
(pk)cve_producto
(pk)cve_tipo_cliente
(pk)fecha_aplicacion_nvo_precio
precio_nuevo

La cosa es, obtener mediante SQL una consulta q me de, entre otros datos, el precio (precio_nuevo) del producto q le corresponde en base a su fecha de distribución, es decir el precio_nuevo lo tendría que "traer" de la tabla PRODUCTO_PRECIO, me explico mejor:

supongamos que en la tabla de PRODUCTO_DISTRIBUIDO, están los siguientes datos:
cve_producto fecha_distribución cve_cliente
1 '23/10/2011' 1
1 '15/11/2011' 1
2 '24/10/2011' 2
2 '25/10/2011' 2
1 10/11/2011' 2

en la tabla de PRODUCTO_PRECIO los siguientes:
cve_producto cve_tipo_cliente fecha_aplicacion_nvo_precio precio_nuevo
1 A '02/02/2005' $ 80.00
2 A '02/02/2005' $75.00
1 B '02/02/2005' $90.00
2 B '02/02/2005' $76.00
1 A '24/10/2011' $100.00
2 A '24/10/2011' $105.00
1 B '24/10/2011' $95.00
2 B '24/10/2011' $80.00

en CLIENTE
cve_cliente descripcion cve_tipo_cliente
1 'BLA BLA1' A
2 'BLA BLA2' A
3 'BLA BLA3' B

en PRODUCTO
cve_producto descripcion
1 leche entera
2 aceite girasol
3 etcetera


Ahora que query sería para obtener esto:
cve_producto fecha_distribucion cve_cliente precio_nuevo

tomando en cuenta que el precio_nuevo debe corresponder al precio registrado en la tabla PRODUCTO_PRECIO y que este corresponda o sea el correcto según en la fecha que se distribuirá.

No se ustedes, pero siento que no fuí lo suficientemente explícito o más bien como q "cantinflie". Bueno agrego solo siguiente. Necesito recuperar el precio que tenia antes de la fecha en el cual se actualizó (fecha_aplicacion) y también recuperar el precio q tiene actualmente por cada cliente y que el precio se muestre dependiendo el tipo de cliente, todo esto en base segun el campo de fecha_distribución....

Si no me di a enteder, favor de comentarlo para ampliar mas la explicación....espero sus comentarios.

celades1 15-11-2011 12:33:35

hola

Código SQL [-]
 
select a.cve_producto,a.fecha_distribucion,a.cve_cliente,
(select precio_nuevo from PRODUCTO_DISTRIBUIDO c
where c.cve_tipo_cliente=b.cve_tipo_cliente
and c.cve_producto a.cve_producto and fecha_aplicacion_nvo_precio=
(select min(fecha_aplicacion_nvo_precio) from PRODUCTO_DISTRIBUIDO c
where c.cve_tipo_cliente=b.cve_tipo_cliente
and c.cve_producto a.cve_producto and fecha_aplicacion_nvo_precio>=a.fecha_distribucion)) precio
from PRODUCTO_PRECIO  a
join CLIENTE b on b.cve_cliente=a.cve_cliente

Esto te dara el precio de la fecha mas cerca por la parte superior de la fecha de distribucion

Si quieres otra cosa solo debes jugar con el min i con el >

Espero haberte entendido , no se si firebird 1.5 permite selects anidadas el 2.0 y el 2.5 seguro

Saludos


La franja horaria es GMT +2. Ahora son las 07:19:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi