मेरे पास प्रतिदिन उपस्थिति लेने के लिए एक डेटाबेस है। हर दिन को एक डेटाटाइम (उपस्थित) फ़ील्ड में शामिल किया जाता है क्योंकि कभी भी कोई छात्र नहीं होता है। इसलिए, एक विशेष छात्र आईडी के लिए (sid) मुझे लगता है कि मैं NOT IN का उपयोग करके उपस्थिति के अंतराल को भरने में सक्षम होऊंगा।

select arrived, date_format(arrived,'%a') as 'day' 
from attendance 
where sid = '38'
  and date_format(arrived, '%Y-%m-%d') NOT IN (
    select DISTINCT date_format(arrived, '%Y-%m-%d') 
    from attendance 
    where MONTH(arrived) = 6
  ) 
  and MONTH(arrived) = 6

हालाँकि, यह वही परिणाम उत्पन्न करता है जैसे कि मैंने NOT IN का उपयोग बिल्कुल नहीं किया था। अब मैं महसूस कर रहा हूं कि वे लापता तिथियां प्रिंट नहीं कर सकतीं क्योंकि वे शुरू करने के लिए सीमित क्वेरी में नहीं हैं। क्या मैं नॉट इन को क्वेरी के सामने ले जा सकता हूं, ताकि वास्तविक तिथियां जिन्हें मैं अनुपस्थित के रूप में प्रदर्शित करना चाहता हूं, प्रदर्शित करने योग्य हैं। उदाहरण के लिए, छात्र 2019-06-06 में अनुपस्थित था (चूंकि 'उसकी' क्वेरी में वह तारीख गायब है और अन्य छात्र थे (इसलिए नेस्टेड क्वेरी करती है 2019-06-06 दिखाती है)

0
PlanB 8 जुलाई 2019, 18:31

2 जवाब

सबसे बढ़िया उत्तर

यह पहेली देखें: https://www.db-fiddle.com/f/x8VVvMBmizmsbJRHmY1GEd/ 0

select date(absences) absences from (select distinct date(arrived) absences from attendance) t2
where date(t2.absences) not in (select date(arrived) from attendance where sid=38)  
0
mankowitz 8 जुलाई 2019, 19:05

आपको आंतरिक और बाहरी क्वेरी को स्वैप करने की आवश्यकता है। आपको उन सभी छात्रों की उपस्थिति के दिनों की तलाश करनी चाहिए जो विशिष्ट छात्र की उपस्थिति के दिनों में नहीं हैं (एसआईडी = 38):

select DISTINCT date(arrived) as 'day' 
from attendance 
where date(arrived) NOT IN (
    select date(arrived) 
    from attendance 
    where sid = '38'
      and MONTH(arrived) = 6
  ) 
  and MONTH(arrived) = 6
0
Paul Spiegel 8 जुलाई 2019, 19:11