MySQL के पुराने संस्करणों (<8.0.2) में, हम व्युत्पन्न तालिकाएं
. व्युत्पन्न तालिका में, हम नवीनतम send_datetime
. प्राप्त कर सकते हैं प्रत्येक conversation_id
. के लिए मान . साथ ही, यह उल्लेखनीय है कि आप WHERE
में बातचीत_आईडी के लिए अपने फ़िल्टर प्रदान कर सकते हैं इस उपश्रेणी का खंड।
फिर हम इस सबक्वेरी के परिणाम-सेट का उपयोग कर सकते हैं और बातचीत में नवीनतम संदेश के अनुरूप पंक्ति प्राप्त करने के लिए उचित रूप से मुख्य तालिकाओं में वापस शामिल हो सकते हैं।
स्कीमा (MySQL v5.7)
क्वेरी #1
SELECT
amc.conversation_id,
m.message_id,
m.message
FROM
assoc_message__conversation AS amc
JOIN message AS m
ON m.message_id = amc.message_id
JOIN
(
SELECT
amc1.conversation_id,
MAX(m1.send_datetime) AS latest_send_datetime
FROM
assoc_message__conversation AS amc1
JOIN message AS m1
ON m1.message_id = amc1.message_id
WHERE amc1.conversation_id IN (1,2) -- Here you provide your input filters
GROUP BY amc1.conversation_id
) AS dt
ON dt.conversation_id = amc.conversation_id AND
dt.latest_send_datetime = m.send_datetime;
परिणाम
| conversation_id | message_id | message |
| --------------- | ---------- | -------------- |
| 1 | 3 | Latest message |
| 2 | 6 | Latest message |
MySQL 8.0.2 और इसके बाद के संस्करण में, हम Row_Number()
. का उपयोग कर सकते हैं कार्यक्षमता। conversation_id
. के एक पार्टिशन में , हम send_datetime
के अवरोही क्रम में क्रमबद्ध प्रत्येक संदेश के लिए पंक्ति संख्या निर्धारित करेंगे . इस सबक्वेरी में, आप WHERE
में बातचीत_आईडी के लिए अपने फ़िल्टर प्रदान कर सकते हैं खंड।
फिर हम इस परिणाम-सेट को व्युत्पन्न तालिका के रूप में उपयोग करेंगे, और केवल उन पंक्तियों पर विचार करेंगे, जहां पंक्ति संख्या मान 1 है (क्योंकि यह नवीनतम send_datetime
से संबंधित होगा। )।
स्कीमा (MySQL v8.0)
क्वेरी #2
SELECT
dt.conversation_id,
dt.message_id,
dt.message
FROM
(
SELECT
amc.conversation_id,
m.message_id,
m.message,
ROW_NUMBER() OVER (PARTITION BY amc.conversation_id
ORDER BY m.send_datetime DESC) AS row_no
FROM
assoc_message__conversation AS amc
JOIN message AS m
ON m.message_id = amc.message_id
WHERE amc.conversation_id IN (1,2) -- Here you provide your input filters
) AS dt
WHERE dt.row_no = 1;
परिणाम
| conversation_id | message_id | message |
| --------------- | ---------- | -------------- |
| 1 | 3 | Latest message |
| 2 | 6 | Latest message |