2011-09-24 19 views
0

すべての送信SMSテキストメッセージを格納するテーブルが1つあります。 2番目のテーブルには、各メッセージの配信確認が格納されます(メッセージごとに1〜20個の配信確認が格納されます)。MySQL Left Outer Join、MAX()およびその他の列

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 

は、メッセージ#466182 2枚の配信領収書があります。

は、私は、次のSQLを持っています。

ただし、正しいdlr_idが返されます(最新のもの)。ただし、返されたdlr_statusが最初のものです。 dlr_statusは2の代わりに5にする必要があります。

ご協力いただけると助かります。これに

答えて

0

変更:

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' 
+0

優秀、ありがとうございます。ただし、これは最新のものだけでなく、両方の行を返します。私は 'GROUP BY'が必要ですか?私はクエリの最後に 'GROUP BY'を試して、それは最も古いものを表示します! – Craig

0

あなたのクエリにだけマイナーな微調整を行う必要があります。

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 

ご確認ください。

関連する問題