Si saliera más de un registro por producto, quiere decir: que a misma fecha
y producto tiene varios precios -para una misma clave única: PRODUCTO,
FECHA-. Lo cual indica una seria incongruencia en los datos, creo que si mi
sentencia no es válida, habría que replantear la tabla2.

Algo así:

>
> tabla1:  producto
>          fecha              (Un solo registro por producto)
>
> tabla2:  producto
>          hastafecha
>          precio              (varios registros por producto)
>

tabla1

  producto  fecha

  CLAVOS  20020918
  TUERCAS   20020106

tabla2

  producto   hastafecha precio
->CLAVOS  20020918 1000
->CLAVOS  20020918 2000
  CLAVOS  20020718 1000
  CLAVOS  20020818 1000


en cualquier caso, -y aún con mal planteamiento inicial de la tabla2-, si
existen precios distintos para mismo producto y misma fecha, creo que tiene
sentido incluirlo en el group by.

Un saludo,
Miguel

----- Original Message -----
From: "Fernando Pérez" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, December 16, 2002 11:19 AM
Subject: RE: Sentencia SQL


No podrías. Fíjate que si pones el precio en el group by te saldría más de
un registro por producto, y el max(fecha) sería a nivel de producto y
precio, en lugar de solamente a nivel de producto.

Creo que no hay forma de sacar los datos con un group by y solo una
sentencia (la sentencia de José Luis son en realidad dos, ya que tiene dos
select). Se quiere el precio del producto correspondiente al registro de la
segunda tabla con la mayor fecha . Ésta se obtiene con un Max, pero el
precio no es recuperable con ninguna función que se pueda aplicar en el
Group by

Saludos.

Fernando Pérez.
Cerámica Saloni. Dpto. Sistemas
<mailto:[EMAIL PROTECTED]>


-----Mensaje original-----
De: Miguel Angel Peinador [mailto:[EMAIL PROTECTED]]
Enviado el: lunes, 16 de diciembre de 2002 10:44
Para: [EMAIL PROTECTED]
Asunto: Re: Sentencia SQL


bueno, también se puede incluir en el select (y en el group by)


Select producto, fecha, max(hastafecha), precio
from tabla1 a, tabla2 b
where a.producto = b.producto
and fecha >= hastafecha
group by producto, fecha, precio

lo de la eficiencia ya depende de muchos factores..., a mi no me va muy mal
probandolo con fichero gordos, pero si tuviera que hacer algo similar -y
pudiera elegir- no usaría SQL sino RPG ó COBOL, que sería mucho más
eficiente.

----- Original Message -----
From: "Fernando Pérez" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, December 16, 2002 10:26 AM
Subject: RE: Sentencia SQL


Esta sentencia sería la mas eficiente si no tuviera que recuperar también el
precio de la segunda tabla. Al tener que recuperarlo obligaría a un segundo
sql sobre la segunda tabla, buscando por producto y la fecha recuperada en
el primero.

Saludos.

Fernando Pérez.
Cerámica Saloni. Dpto. Sistemas
<mailto:[EMAIL PROTECTED]>


-----Mensaje original-----
De: Miguel Angel Peinador [mailto:[EMAIL PROTECTED]]
Enviado el: lunes, 16 de diciembre de 2002 10:09
Para: [EMAIL PROTECTED]
Asunto: Re: Sentencia SQL


prueba con esto:

Select producto, fecha, max(hastafecha)
from tabla1 a, tabla2 b
where a.producto = b.producto
and fecha >= hastafecha
group by producto, fecha


Un saludo,
Miguel

----- Original Message -----
From: "Jose Luis Mur Lalueza" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Sunday, December 15, 2002 6:34 PM
Subject: Sentencia SQL


> Hola,
>
> Cómo resolveríais esto con SQL?
>
> tabla1:  producto
>          fecha              (Un solo registro por producto)
>
> tabla2:  producto
>          hastafecha
>          precio              (varios registros por producto)
>
>
> Necesito unir las 2 tablas, un solo registro de la tabla2 cuyo campo fecha
> sea el más proximo inferior o igual al campo fecha de la tabla1.
>
> Los obtengo con la siguiente sentencia: Select * from tabla1 a, tabla2 b
> where a.producto = b.producto and b.hastafecha = (select max(hastafecha)
> from tabla2 c where b.producto = c.producto and c.hastafecha <= a.fecha)
>
> El problema es que me genera una via de acceso de la tabla2 y tiene muchos
> registros
>
> Se os ocurre algo?
>
> slds
> José Luis
>
>
>
> _____________________________________________________
> Forum.HELP400 es un servicio más de NEWS/400.
> © Publicaciones Help400, S.L. - Todos los derechos reservados
> http://www.help400.es
> _____________________________________________________
>
> Para darte de baja, envía el mensaje resultante de pulsar
> mailto:[EMAIL PROTECTED]?body=LEAVE


_____________________________________________________
Forum.HELP400 es un servicio más de NEWS/400.
© Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja, envía el mensaje resultante de pulsar
mailto:[EMAIL PROTECTED]?body=LEAVE

_____________________________________________________
Forum.HELP400 es un servicio más de NEWS/400.
© Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja, envía el mensaje resultante de pulsar
mailto:[EMAIL PROTECTED]?body=AVE


_____________________________________________________
Forum.HELP400 es un servicio más de NEWS/400.
© Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja, envía el mensaje resultante de pulsar
mailto:[EMAIL PROTECTED]?body=LEAVE

_____________________________________________________
Forum.HELP400 es un servicio más de NEWS/400.
© Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja, envía el mensaje resultante de pulsar
mailto:[EMAIL PROTECTED]?body=AVE


_____________________________________________________
Forum.HELP400 es un servicio más de NEWS/400.
© Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja, envía el mensaje resultante de pulsar
mailto:[EMAIL PROTECTED]?body=LEAVE

Responder a