Trabajar con fechas en una consulta

30/06/2003 - 17:14 por Greg | Informe spam
Hola,
Tengo una tabla de Precios (ValidoDesde, IdProducto,
Precio) - Los precios de los productos cambian (-->
Cambian los campos ValidoDesde & Precio) - y otra de
Pedidos (FechaPedido, IdCliente, IdPedido, IdProducto,
Cantidad,...).
Me gustaria que la consulta PedidosConsulta fuera capaz
de hallar el precio correcto del producto según la Fecha
en la que se realiza el pedido.
No basta con incluir en criterios de FechaPedido: >=
[ValidoDesde] ya que puedo cambiar de precio cada mes por
un mismo producto y habría muchos precios disponibles por
un pedido en una fecha X.

Ejemplo:

- Tabla de Precios:
ValidoDesde IdProducto Precio
01/10/02 Hora 7,50 ?
15/01/03 Hora 7,00 ?
30/03/03 Hora 7,25 ?


- Tabla de Pedidos
FechaPedido IdCliente IdPedido IdProducto ...
15/10/02 1 1 Hora
01/01/03 1 2 Hora
08/03/03 2 3 Hora
15/07/03 1 4 Hora

- Consulta de Pedidos que quiero obtener:
FechaPedido IdCliente IdPedido Importe
15/10/02 1 1 7,50 ?
01/01/03 1 2 7,50 ?
08/03/03 2 3 7,00 ?
15/07/03 1 4 7,25 ?

PS: Lo único que se me occure es añadir un campo
ValidoHasta en la tabla de Precios con el fin de pedir
que FechaPedido >= ValidoDesde AND (FechaPedido <=
ValidoHasta Or IsNull(ValidoHasta)) pero eso tiene doble
inconveniente:
- Me obliga a entrar una fecha para ValidoHasta (< de 1
día al nuevo ValidoDesde) siempre que cambio de precio.
- Me complica muchisimo los criterios de varias consultas
ya que los precios NO son los únicos datos que cambian
segun las fechas (Tambien cambian los datos de 5 o 6
tablas más) así que imaginaros las lineas de criterios en
una consulta que combine todos esos datos.

Gracias de antemano a los que gasten tiempo para
solucionarme este dolor de cabeza.
 

Leer las respuestas

#1 Patricia
30/06/2003 - 10:03 | Informe spam
Creo que lo que te serviría es algo así

SELECT FechaPedido, IdCliente, IdPedido, Importe
FROM Pedidos, Precios
WHERE (Pedidos.IdPedido = Precios.IdPrecios)
AND ValidoDesde EXISTS (SELECT last (fecha) FROM Precios AS P
WHERE (P.ValidoDesde < Pedidos.FechaPedido) AND (Precios.IdPedido P.IdPedido))

La idea es seleccionar los datos que requerís donde el importe es el dato de
aquel registro que tiene la mayor fecha de ValidoDesde menor que la
FechaPedido.

Espero que se entienda y suerte!
Saludos!
Patricia

"Greg" escribió en el mensaje
news:265a01c33f1a$3dcb0240$
Hola,
Tengo una tabla de Precios (ValidoDesde, IdProducto,
Precio) - Los precios de los productos cambian (-->
Cambian los campos ValidoDesde & Precio) - y otra de
Pedidos (FechaPedido, IdCliente, IdPedido, IdProducto,
Cantidad,...).
Me gustaria que la consulta PedidosConsulta fuera capaz
de hallar el precio correcto del producto según la Fecha
en la que se realiza el pedido.
No basta con incluir en criterios de FechaPedido: >[ValidoDesde] ya que puedo cambiar de precio cada mes por
un mismo producto y habría muchos precios disponibles por
un pedido en una fecha X.

Ejemplo:

- Tabla de Precios:
ValidoDesde IdProducto Precio
01/10/02 Hora 7,50 ?
15/01/03 Hora 7,00 ?
30/03/03 Hora 7,25 ?


- Tabla de Pedidos
FechaPedido IdCliente IdPedido IdProducto ...
15/10/02 1 1 Hora
01/01/03 1 2 Hora
08/03/03 2 3 Hora
15/07/03 1 4 Hora

- Consulta de Pedidos que quiero obtener:
FechaPedido IdCliente IdPedido Importe
15/10/02 1 1 7,50 ?
01/01/03 1 2 7,50 ?
08/03/03 2 3 7,00 ?
15/07/03 1 4 7,25 ?

PS: Lo único que se me occure es añadir un campo
ValidoHasta en la tabla de Precios con el fin de pedir
que FechaPedido >= ValidoDesde AND (FechaPedido <ValidoHasta Or IsNull(ValidoHasta)) pero eso tiene doble
inconveniente:
- Me obliga a entrar una fecha para ValidoHasta (< de 1
día al nuevo ValidoDesde) siempre que cambio de precio.
- Me complica muchisimo los criterios de varias consultas
ya que los precios NO son los únicos datos que cambian
segun las fechas (Tambien cambian los datos de 5 o 6
tablas más) así que imaginaros las lineas de criterios en
una consulta que combine todos esos datos.

Gracias de antemano a los que gasten tiempo para
solucionarme este dolor de cabeza.



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.495 / Virus Database: 294 - Release Date: 2003-06-30

Preguntas similares