मेरे पास दो टेबल हैं, पहला इस तरह है:

     INTERNSHIP
ID|  Term
---------
1 | 2015
1 | 2014
2 | 2016
2 | 2017

दूसरा इस प्रकार है:

       Term
Term| Term Description | End Date
---------------------------------
2014 |  Summer 2014   | 8/12014
2014 |  Summer 2014   | 8/12014
2015 |  Fall 2015     | 12/1/2015
2017 |  Spring 2017   | 4/1/2017
2017 |  Spring 2017   | 6/1/2017

मुझे सभी आईडी के लिए सबसे हाल के शब्द के लिए "टर्म विवरण" खोजने की जरूरत है। वांछित परिणाम इस प्रकार है:

ID| Term | Term Description 
------------------
1 |  2015   |  Fall 2015   
2 |  2017   |  Spring 2017

मैंने कुछ शोध किया और इस तरह के समाधान के साथ आया:

SELECT INTERNSHIP.ID, INTERNSHIP.Term
FROM INTERNSHIP
WHERE (
  SELECT MAX(INTERNSHIP.Term)
  )
GROUP BY INTERNSHIP.ID

इसके द्वारा मुझे सबसे हालिया टर्म के साथ अलग-अलग आईडी मिल गए, लेकिन मैं टर्म डिस्क्रिप्शन के साथ इसमें शामिल नहीं हो सका। क्या कोई मुझे वांछित परिणाम प्राप्त करने में मदद कर सकता है?

4
Di Tran 17 मई 2018, 06:11

3 जवाब

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

इसे आजमाएं:

SELECT i.id, i.term, t.Term_Description
FROM INTERNSHIP i
INNER JOIN Term t ON t.Term = i.term
INNER JOIN (
            SELECT MAX(t.End_Date) End_Date
            FROM INTERNSHIP i
            INNER JOIN Term t ON t.Term = i.term
            GROUP BY i.ID) t1 ON t1.End_Date = t.End_Date
5
Susang 17 मई 2018, 07:14

क्या आपका SQL संस्करण आपको विंडो फ़ंक्शंस का उपयोग करने की अनुमति देता है?

यदि हां, तो आप इसे इस तरह आसानी से हल कर सकते हैं:

SELECT C.ID,C.Term,C.Term_Description
FROM(
SELECT A.ID,A.TERM,B.Term_Description,Max(A.Term) OVER (PARTITION BY A.ID) AS Most_Recent_Year
FROM INTERNSHIP A INNER JOIN TERM B ON A.Term = B.Term
)C
WHERE C.Term = C.Most_Recent_Year
2
Rohan Ds 17 मई 2018, 07:11

मैं सलाह दूँगा:

SELECT i.id, i.term, t.Term_Description
FROM (SELECT i.id, MAX(i.Term) as term
      FROM INTERNSHIP i
      GROUP BY i.id
     ) i JOIN
     Term t
     ON t.Term = i.term;
1
Gordon Linoff 17 मई 2018, 15:07