mysql विशिष्ट अद्वितीय आईडी फ़िल्टर नहीं करता है - mysql, sql

Mysql का उपयोग करके मैं परिणाम प्रदर्शित करने का प्रयास कर रहा हूंउपकरणों (serialno) की एक सूची के साथ जो एक विशिष्ट समय (last_seen) के लिए प्रकट नहीं हुए हैं और फिर अधिकतम (last_seen) के साथ केवल अद्वितीय डिवाइस प्रदर्शित करते हैं। Last_seen एक init मान है जो एक संख्या है जो डिवाइस को नहीं देखा गया है जब वृद्धि (सोच मिनट)। एक सारणी की कल्पना करें जिसमें serialno "L123" के साथ last_seen "1" के साथ पंक्ति है, फिर एक और मिनट के बाद, serialno "L123" last_seen "2" के साथ, और चौथा। अधिकतम (last_seen) का उपयोग करके परिणामों को उच्चतम संख्या या डिवाइस को अंतिम बार देखा जाना चाहिए।

अब तक काम करता है, लेकिन मैं देख रहा हूं कि एक डिवाइस कहां हैserialno L123 दो बार प्रदर्शित होगा, मैं परिणामों को फ़िल्टर कैसे कर सकता हूं केवल उच्चतम last_seen प्रदर्शित करने के लिए? मैंने अलग-अलग परिदृश्यों का उपयोग करके दो परिदृश्यों की कोशिश की है, लेकिन उनमें से कोई भी काम नहीं कर रहा है।

मुझे जो मिलता है उसका एक उदाहरण के रूप में (काम नहीं कर रहा)

email             | serialno | Last seen (min)
[email protected]   | L123     | 30
[email protected]  | K900     | 20
[email protected]  | L123     | 1 <--yes the email is different but same serialno

जो देखना चाहते हैं उसका एक उदाहरण के रूप में

email             | serialno | Last seen (min)
[email protected]   | L123     | 30
[email protected]  | K900     | 20

परिदृश्य 1: जहां उप-क्वेरी में विशिष्ट का चयन करें

SELECT
email,
serialno,
max(last_seen)

FROM
my_table

WHERE
last_seen IN (SELECT last_seen FROM my_table WHERE last_seen > 0)
AND
serialno IN (SELECT distinct serialno FROM my_table)

GROUP BY
2,1

ORDER BY
3 DESC

परिदृश्य 2: समूह के बाद, होने का उपयोग कर

SELECT
email,
serialno,
max(last_seen)

FROM
my_table

WHERE
last_seen IN (SELECT last_seen FROM my_table WHERE last_seen > 0)

GROUP BY
2,1

HAVING
serialno in (SELECT distinct serialno FROM my_table)

ORDER BY
3 DESC

उत्तर:

उत्तर № 1 के लिए 1

JOIN एक उप-क्वेरी के साथ जिसका उपयोग प्रत्येक serialno के अधिकतम last_seen मान को खोजने के लिए किया जाता है:

select t1.*
from my_table t1
join (select serialno, max(Last_seen) Last_seen
from my_table
group by serialno) t2
on t1.serialno = t2.serialno and t1.Last_seen = t2.Last_seen
order by t1.Last_seen desc

जवाब के लिए 0 № 2

उन मूल्यों पर विशिष्ट कार्य जिन्हें आप वास्तव में आउटपुट करना चाहते हैं। यदि आप इसे उप-चयन में उपयोग करते हैं, तो आपको उप-चयन में अद्वितीय मानों को भी फ़िल्टर करना होगा।

पहली क्वेरी में हालांकि serialno द्वारा समूह केवल। आप बस अपने serialno के लिए समूहित परिणाम चाहते हैं। आपको क्लॉज या होने की आवश्यकता नहीं है।


संबंधित सवाल
सबसे लोकप्रिय