यह greatest-n-per-group
है समस्या, जिसे स्टैक ओवरफ़्लो पर अक्सर पूछा जाता है।
यहां बताया गया है कि मैं इसे आपके परिदृश्य में कैसे हल करूंगा:
SELECT m.memberid, m.membername, m.gender, mp.phone, mh.loggedtime, mh.ipaddy
FROM tbl_members m
INNER JOIN tbl_members_phones mp ON m.defaultphoneid = mp.phoneid
INNER JOIN tbl_members_addresses ma ON m.defaultaddressid = ma.addressid
LEFT OUTER JOIN tbl_members_login_history mh ON m.memberid = mh.memberid
LEFT OUTER JOIN tbl_members_login_history mh2 ON m.memberid = mh2.memberid
AND mh.pk < mh2.pk
WHERE mh2.pk IS NULL;
यानी हमें mh
चाहिए दिए गए सदस्य के लिए tbl_member_login_history में सबसे हाल की पंक्ति होने के लिए। इसलिए हम दूसरी पंक्ति खोजते हैं mh2
यह और भी ताजा है। यदि mh
. से अधिक हाल ही में कोई नहीं पंक्ति मिलती है, फिर mh2.*
NULL होगा, इसलिए mh
नवीनतम होना चाहिए।
मुझे लगता है कि इस तालिका में प्राथमिक कुंजी कॉलम है जिसमें बढ़ते मान शामिल हैं। इस उदाहरण के लिए, मुझे लगता है कि कॉलम का नाम pk
है ।
दोनों के लिए LEFT OUTER JOIN का उपयोग करना लॉगिन इतिहास तालिका के संदर्भ का अर्थ है कि m
कोई मिलान पंक्ति न होने पर भी पंक्ति की सूचना दी जाएगी।