Ayuda con Inner join

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • r.velasco
    Junior Member
    • feb
    • 5

    #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
  • ZipiSAPe
    Junior Member
    • dic
    • 3

    #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

    Comentario

    • emilio.acuna
      Junior Member
      • feb
      • 2

      #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

      Comentario

      • r.velasco
        Junior Member
        • feb
        • 5

        #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.

        Comentario

        • sap2006
          Senior Member
          • mar
          • 134

          #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.

          Comentario

          • danny
            Member
            • mar
            • 36

            #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;

            Comentario

            Trabajando...