मेरे पास वर्तमान में कई रिकॉर्ड हैं लेकिन मुझे केवल एक रिकॉर्ड की आवश्यकता है। मैंने क्रॉस अप्लाई करने की कोशिश की है, लेकिन ऐसा लगता है कि मुझे कुछ याद आ रहा है जिसे मैं खुद पिंग नहीं कर सकता। इसके बजाय, मुझे एक अलग मूल्य मिलता है कि यह प्रदान की गई तालिका में रिकॉर्ड में भी नहीं है।

किसी भी मदद को बहुत सराहा जाएगा।

id         subject          enrollmentdate    roomNum  
00045       science         3-3-2016             98
00045       science         3-3-2016             52
00089       math            7-25-2017            13
00089       math            7-25-2017            56
00123       social studies  3-1-2016             02
00136       gym             5-2-2017             01
00159       math            9-2-2017             96 

जिज्ञासा:

select  d.id, c.subject, c.Enrollmentdate, ds.roomNum
from  #classrooms as c 
 cross apply 
     (select top 1 roomNum, subject,Enrollmentdate
      from  #classrooms 
      where subject = c.subject
      and enrollmentdate = c.enrollmentdate
      order by id desc) as ds

नतीजा:

 id         subject          enrollmentdate    roomNum  
    00045       science         3-3-2016             66
    00045       science         3-3-2016             66
sql
0
Estefania 6 अगस्त 2018, 23:09
आप कौन सा रिकॉर्ड चुनना चाहते हैं और हम इसे किस नियम से खोज सकते हैं?
 – 
Thorsten Kettner
6 अगस्त 2018, 23:12
ऐसा लगता है कि समान पंक्तियों को समूहीकृत करना आपको चाहिए। क्या आप उदाहरण दे सकते हैं कि आप किन पंक्तियों को समूहबद्ध करना चाहते हैं? आप अपनी "समान है" तुलना में कौन से कॉलम शामिल करेंगे?
 – 
The Impaler
6 अगस्त 2018, 23:36

2 जवाब

अगर आपको केवल एक की जरूरत है (और ज्यादा परवाह नहीं है कौन सा), तो ऐसा कुछ मदद कर सकता है:

select id, 
       subject, 
       enrollmentdate, 
       max(roomnum) max_roomnum
from #classrooms
group by id, 
         subject, 
         enrollmentdate;
3
Littlefoot 6 अगस्त 2018, 23:13

यदि आप कोई विशेष चाहते हैं, तो आप top with ties का उपयोग कर सकते हैं:

select top (1) with ties c.*
from #classrooms c
order by row_number() over (partition by id, subject, enrollmentdate order by roomNum desc);

या वास्तव में यादृच्छिक के लिए:

select top (1) with ties c.*
from #classrooms c
order by row_number() over (partition by id, subject, enrollmentdate order by newid() desc);
0
Gordon Linoff 7 अगस्त 2018, 06:22