MySQL MAX в запросе на присоединение - PullRequest
0 голосов
/ 28 октября 2019

Я хотел бы объединить две таблицы на значение MAX.

Макс (lg) верны, но столбец «событие» загружается неправильно.

Ниже приведены примеры таблиц и желаемый результат ...

Я использую ...

SELECT a.id
     , a.name
     , b_lg
     , b_event
  FROM TABLE_A a
  LEFT 
  JOIN
     ( SELECT MAX(lg) as b_lg
            , event as b_event
            , enrolid as b_enrolid 
         FROM TABLE_B 
        GROUP 
           BY lg) b
    ON a.id = b_enrolid
 GROUP BY a.id

####### TABLEA ########

  id |    name        |
   1 |     John       |
   2 |     Mike       |
   3 |     Dave       |
   4 |     Sarah      |

################# TABLEB ###############

  id |  enrolid |    lg     |  event   |
   1 |  1       |    10     |    A     |
   2 |  2       |    20     |    B     |
   3 |  1       |    30     |    C     |
   4 |  2       |    60     |    D     |
   5 |  2       |    50     |    E     |
   6 |  3       |    60     |    F     |
   7 |  1       |    70     |    G     |
   8 |  3       |    20     |    H     |

###### ЖЕЛАЕМЫЙ ВЫХОД #####

  id |  name       |   lg   |   event   |
   1 |  John       |   70   |     G     |
   2 |  Mike       |   60   |     D     |
   3 |  Dave       |   60   |     F     |
   4 |  Sara       |  NULL  |   NULL    | 

1 Ответ

1 голос
/ 28 октября 2019

Этот запрос даст вам результаты, которые вы хотите. Он вычисляет MAX значение lg для каждого enrolid и затем использует эти значения от LEFT JOIN до Table_A, чтобы получить name и Table_B, чтобы получить event:

SELECT A.id, A.name, B.lg, B.event
FROM Table_A A
LEFT JOIN (SELECT enrolid, MAX(lg) AS max_lg
           FROM Table_B
           GROUP BY enrolid) M ON M.enrolid = A.id
LEFT JOIN Table_B B ON B.enrolid = M.enrolid AND B.lg = M.max_lg
ORDER BY A.id

Вывод:

id  name    lg      event
1   John    70      G
2   Mike    60      D
3   Dave    60      F
4   Sarah   null    null

Демонстрация на dbfiddle.com

...