简体   繁体   English

MySQL左外部联接,MAX()和其他列

[英]MySQL Left Outer Join, MAX() and other columns

I have one table which stores all outbound SMS text messages. 我有一张表,用于存储所有出站SMS文本消息。 The second table stores a number of delivery receipts for each message (between 1 and 20 delivery receipts per message). 第二个表存储每个邮件的多个收据(每个邮件1到20个之间)。

I have the following SQL: 我有以下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

There are 2 delivery receipts for message #466182. 邮件#466182有2个交货收据。

The correct dlr_id is returned (the most recent one) however, the dlr_status that is returned is the first one. 返回正确的dlr_id (最新的),但是,返回的dlr_status是第一个。 dlr_status should be 5 instead of 2. dlr_status应该是5而不是2。

Any help would be very much appreciated. 任何帮助将不胜感激。

change to this: 更改为此:

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'

Just a minor tweak to your query should do: 只需对查询进行一些细微调整即可:

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

Please check. 请检查。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM