#1
|
|||
|
|||
Ayuda con Inner join
Hola, tengo un problema con el inner join, alguien puede ayudarme? Necesito hacer un select con un inner join y un campo maximo, algo de este estilo
SELECT tabla1~dato1 tabla2~dato2 INTO (campo1, campo2) FROM tabla1 INNER JOIN tabla2 on tabla1~dato3=tabla2~dato4 where dato IN s_dato AND MAX (fecha). Esto al compilarlo me da fallo... ¿alguien sabria decir xq? También he probado seleccionando el max, pero no funciona.... SELECT tabla1~dato1 tabla2~dato2 MAX (fecha) INTO (campo1, campo2, fecha) FROM tabla1 INNER JOIN tabla2 on tabla1~dato3=tabla2~dato4 where dato IN s_dato AND Muchas gracias por adelantado |
#2
|
|||
|
|||
Hola,
Prueba lo siguiente: SELECT tabla1~dato1 tabla2~dato2 MAX (fecha) INTO (campo1, campo2, fecha) FROM tabla1 INNER JOIN tabla2 on tabla1~dato3=tabla2~dato4 where dato IN s_dato GROUP BY tabla1~dato1 tabla2~dato2 Además, supongo que ya lo sabrás pero por si acaso, te falta poner espacio después de los paréntesis al hacer MAX. Yo lo he probado con un ejemplillo y me compila sin problemas. Un saludo |
#3
|
|||
|
|||
INNER JOIN y FUNCION MAX
Hola, tengo una duda muy parecida como esta de nuestro colega r. velasco.
Tengo un select con un inner join y una funcion max, ocorre que es necesario coger una tabla del diccionario que encontrase asi: Ejemplo. Coche Año 01 2008 01 2005 02 2000 02 2001 03 1997 03 1995 La funcion MAX deberia traer todos los coches cuyo año sea maior, de esta forma: Coche (Campo1) Año (Campo2) 01 2008 02 2000 03 1997 Esto es mi select: SELECT tabla1~Campo1 tabla1~Campo3 tabla1~Campo4 tabla1~Campo5 tabla1~Campo6 tabla2~Campo7 tabla2~Campo8 tabla2~Campo9 tabla2~Campo2 INTO (wa_1-Campo1, wa_1-Campo3, wa_1-Campo4, wa_1-Campo5, wa_1-Campo6, wa_1-Campo7, wa_1-Campo8, wa_1-Campo9, wa_1-Campo2) FROM tabla1 INNER JOIN tabla2 ON tabla1~Campo1 = tabla2~Campo1 AND tabla1~Campo3 = tabla2~Campo3 AND tabla1~Campo4 = tabla2~Campo4 WHERE tabla1~Campo5 IN s_Campo5 AND tabla1~Campo1 IN s_Campo1 AND tabla2~Campo10 = p_Campo10 AND tabla2~Campo2 = ( SELECT MAX( tabla2~Campo2 ) FROM tabla2 ) GROUP BY tabla1~Campo1 tabla2~Campo9 tabla2~Campo8 tabla2~Campo7 tabla1~Campo6 tabla1~Campo5 tabla1~Campo4 tabla1~Campo3 tabla2~Campo2 ORDER BY tabla1~Campo1. APPEND wa_1 TO itab_1. ENDSELECT. No lo se que ocurre pues esta saliendo solo el coche leido por primero (01 2008). No esta leyendo el cambio de coche. Espero que alguien pueda ayudarme. Gracias por adelantado. Emilio Acuña |
#4
|
|||
|
|||
Lo primero, gracias ZipSAPe por responder, pero bueno esa parte ya lo habia probado... lo que pasa es que no lo puse en el ejemplo
Lo curioso es que mi caso es el mismo que el de Emilio... ya he (hemos) encontrado solución. Primero con un SELECT DISTINCT metes en una tabla interna 'los coches' (pero solo una vez) Un loop de esa tabla y dentro el anterior select, pero sin recoger ni asignar 'coche' LOOP itab_coches. SELECT tabla1~Campo3 tabla1~Campo4 tabla1~Campo5 tabla1~Campo6 tabla2~Campo7 tabla2~Campo8 tabla2~Campo9 tabla2~Campo2 INTO ( wa_1-Campo3, wa_1-Campo4, wa_1-Campo5, wa_1-Campo6, wa_1-Campo7, wa_1-Campo8, wa_1-Campo9, wa_1-Campo2) FROM tabla1 INNER JOIN tabla2 ON tabla1~Campo1 = tabla2~Campo1 AND tabla1~Campo3 = tabla2~Campo3 AND tabla1~Campo4 = tabla2~Campo4 WHERE tabla1~Campo5 IN s_Campo5 AND tabla1~Campo1 IN s_Campo1 AND tabla2~Campo10 = p_Campo10 AND tabla2~Campo2 = ( SELECT MAX( tabla2~Campo2 ) FROM tabla2 WHERE coche = itab_coches-coche) GROUP BY tabla2~Campo9 tabla2~Campo8 tabla2~Campo7 tabla1~Campo6 tabla1~Campo5 tabla1~Campo4 tabla1~Campo3 tabla2~Campo2 wa_1-campo1 = itab_coches-campo1. APPEND wa_1 TO itab_1. ENDSELECT. ENDLOOP. |
#5
|
|||
|
|||
Si no recuerdo mal (hace tiempo que no hago subconsultas) creo que no os estava funcionando porque la subconsulta debe ir en la clausula HAVING no en el where.
Saludos. |
#6
|
|||
|
|||
Holas;
si lo k kieres es obtener el año mayor x cada coche (suponiendo que de la otra tabla kieres recuperar un campo descripcion) : DATA: BEGIN OF tnam OCCURS 0, COCHE LIKE TABLE1-COCHE, DESCOCHE LIKE TABLE2-DESCOCHE, AÑO LIKE TABLE1-AÑO, END OF tnam. select A~COCHE B~DESCOCHE MAX( A~AÑO ) AS AÑO INTO CORRESPONDING FIELDS OF TABLE TNAM FROM TABLE1 AS A INNER JOIN TABLE2 AS B ON A~COCHE = B~COCHE WHERE A~CAMPO = XXXX GROUP BY A~COCHE B~DESCOCHE. Saludos; |
Herramientas | Buscar en Tema |
Desplegado | |
|
|