MySQL Left Outer Join, MAX () и другие столбцы - PullRequest
0 голосов
/ 24 сентября 2011

У меня есть одна таблица, в которой хранятся все исходящие текстовые сообщения SMS.Во второй таблице хранится количество квитанций о доставке для каждого сообщения (от 1 до 20 квитанций о доставке на сообщение).

У меня есть следующий SQL:

SELECT
    messages_sent.id,
    messages_sent.user_id,
    messages_sent.api_key,
    messages_sent.to,
    messages_sent.message,
    messages_sent.sender_id,
    messages_sent.route,
    messages_sent.submission_reference,
    messages_sent.unique_submission_reference,
    messages_sent.reason_code,
    messages_sent.timestamp,
    MAX(delivery_receipts.id) AS dlr_id,
    delivery_receipts.dlr_status
FROM
    messages_sent
LEFT OUTER JOIN
    delivery_receipts
ON
    messages_sent.id = delivery_receipts.message_id
WHERE
    message_id = '466182'
GROUP BY
    messages_sent.id

Есть 2 квитанции о доставке длясообщение # 466182.

Возвращается правильный dlr_id (самый последний), однако возвращается dlr_status - первый.dlr_status должно быть 5 вместо 2.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2011

Просто небольшая подстройка к вашему запросу должна сделать:

SELECT
  m.id, m.user_id, m.api_key, m.to, m.message, m.sender_id, m.route, 
  m.submission_reference, m.unique_submission_reference, m.reason_code, 
  m.timestamp, MAX(d.id) AS dlr_id, 
  (select d1.dlr_status
  from delivery_receipts d1
  where d1.id = max(d.id)) as dlr_status
FROM
  messages_sent m
LEFT OUTER JOIN
  delivery_receipts d
ON
  m.id = d.message_id
AND
  d.message_id = '466182'
GROUP BY
  m.id

Пожалуйста, проверьте.

0 голосов
/ 24 сентября 2011

изменить на это:

Select m.id, m.user_id, m.api_key, m.to, 
    m.message, m.sender_id, m.route, 
    m.submission_reference, 
    m.unique_submission_reference,  
    m.reason_code, m.timestamp, 
    d.id dlr_id, d.dlr_status
From messages_sent m 
   Left Join delivery_receipts d 
      On d.message_id = m.id 
         And d.dlr_id = (Select Max(dlr_id)
                         From delivery_receipts 
                         Where message_id = m.id)
Where message_id = '466182'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...