Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL LEFT ज्वाइन टेबल पर MAX और GROUP BY का उपयोग करके जॉइन करें?

"नवीनतम प्रति समूह" समस्या अत्यंत है एसक्यूएल में आम। अकेले इस साइट पर इस समस्या के समाधान के अनगिनत उदाहरण हैं।

यदि आपका टाइमस्टैम्प प्रति सदस्य गतिविधि के लिए अद्वितीय है:

SELECT
  m.id,
  m.name,
  a.code activity_code,
  a.timestamp activity_timestamp,
  a.description activity_description
FROM
  members m
  INNER JOIN activities a ON a.member_id = m.id
WHERE
  a.timestamp = (SELECT MAX(timestamp) FROM activities WHERE member_id = m.id)

वैकल्पिक रूप से, यदि आपकी गतिविधि आईडी समय के साथ एकरस रूप से बढ़ रही है:

  ...
WHERE
  a.id = (SELECT MAX(id) FROM activities WHERE member_id = m.id)

आपको समूह बनाने की आवश्यकता नहीं है। लेकिन क्वेरी activities . पर एक अनुक्रमणिका से लाभान्वित होगी (member_id, timestamp) से अधिक या (member_id, id) , क्रमशः।

संपादित करें

ऐसे किसी भी सदस्य को दिखाने के लिए, जिन्होंने कोई गतिविधि लॉग नहीं की है, इस तरह से एक लेफ्ट जॉइन का उपयोग करें।

SELECT
  m.id,
  m.name,
  a.code activity_code,
  a.timestamp activity_timestamp,
  a.description activity_description
FROM
  members m
  LEFT JOIN activities a ON 
    a.member_id = m.id
    AND a.timestamp = (SELECT MAX(timestamp) FROM activities WHERE member_id = m.id)

ध्यान दें कि कोई WHERE नहीं है खंड। अर्थ की दृष्टि से, WHERE को बाद लागू किया जाता है जोड़ किए जाते हैं। तो WHERE क्लॉज उन पंक्तियों को हटा देगा जिन्हें LEFT JOIN जोड़ा गया है, प्रभावी रूप से मूल INNER JOIN के समान परिणाम दे रहा है।

लेकिन अगर आप अतिरिक्त विधेय को सीधे शामिल होने की स्थिति में लागू करते हैं, तो LEFT JOIN अपेक्षा के अनुरूप काम करेगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django में manage.py के साथ सीएलआई से डेटाबेस को साफ़ करने का सबसे आसान तरीका क्या है?

  2. MySQL REPLACE () - एक सबस्ट्रिंग के सभी इंस्टेंस को दूसरे स्ट्रिंग से बदलें

  3. php में get_result () के बजाय bind_result () का उपयोग कैसे करें

  4. संख्या को 2 दशमलव स्थानों पर प्रारूपित करें

  5. MySQL के साथ कॉलम नामों में रिक्त स्थान