समझने के लिए दो बातें:
-
सामान्यतया, परिणामसेट अनियंत्रित होते हैं। जब तक आप
ORDER BY
निर्दिष्ट नहीं करते हैं खंड; जिस हद तक आप गैर-सख्त आदेश निर्दिष्ट करते हैं (अर्थातORDER BY
गैर-अद्वितीय स्तंभों पर), जिस क्रम में उस क्रम के तहत समान रिकॉर्ड परिणाम सेट के भीतर दिखाई देते हैं, वह अपरिभाषित है।मुझे संदेह है कि आप ऐसा गैर-सख्त आदेश निर्दिष्ट कर रहे हैं, जो आपकी समस्याओं की जड़ है:
ORDER BY
निर्दिष्ट करके सुनिश्चित करें कि आपका आदेश सख्त है कॉलम के एक सेट पर जो प्रत्येक रिकॉर्ड को विशिष्ट रूप से पहचानने के लिए पर्याप्त है जिसके लिए आप परिणामसेट में इसकी अंतिम स्थिति की परवाह करते हैं। -
DISTINCT
GROUP BY
. का उपयोग कर सकते हैं , जिसके कारण परिणामों को समूहीकृत स्तंभों द्वारा क्रमित किया जाता है; यानी,SELECT DISTINCT a, b, c FROM t
एक परिणाम सेट तैयार करेगा जो ऐसा प्रतीत होता है जैसेORDER BY a, b, c
लागू किया है। फिर से, अपनी आवश्यकताओं को पूरा करने के लिए पर्याप्त रूप से सख्त आदेश निर्दिष्ट करने से यह प्रभाव समाप्त हो जाएगा।
आपके अपडेट के बाद, उपरोक्त मेरे बिंदु #2 को ध्यान में रखते हुए, यह स्पष्ट है कि परिणामों को समूहीकृत करने का प्रभाव DISTINCT
प्राप्त करने के लिए है इसके बाद गैर-समूहीकृत कॉलम p.id
. द्वारा ऑर्डर करना असंभव बना देता है; इसके बजाय, आप चाहते हैं:
SELECT t.*
FROM Threads t INNER JOIN Posts p ON t.id = p.threadid
GROUP BY t.id
ORDER BY MAX(p.id) DESC