Viendo la estructura de datos yo interpreto que la tabla2 son las tarifas de precio por fechas. Desde ese punto de vista tiene sentido que para un mismo producto hayan varios precios para hastafecha distintas. A un producto y fecha se debe aplicar �nicamente un registro de tabla2, que ser�a el precio m�s actualizado del producto a esa fecha (con el mayor hastafecha que sea <= que tabla1.fecha). El problema es que al hacerlo por SQL necesitamos un Group by por producto, aplicando el max sobre hastafecha, para saber cual es el mayor de los iguales o inferiores a fecha, pero al hacer esto no podemos recuperar en la misma sentencia el precio.
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 11:45 Para: [EMAIL PROTECTED] Asunto: Re: Sentencia SQL 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 _____________________________________________________ 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
