/ / मैं SQL में दो निरंतर पंक्तियों द्वारा कैसे खोज सकता हूं? - sql, डेटाबेस, पीपुल्सॉफ्ट

मैं SQL में दो निरंतर पंक्तियों द्वारा कैसे खोज सकता हूं? - sql, डेटाबेस, पीपुल्सॉफ्ट

SQL टेबल दिया

id     date       employee_type  employee_level
1   10/01/2015        other            2
1   09/13/2011      full-time          1
1   09/25/2010       intern            1
2   09/25/2013      full-time          3
2   09/25/2011      full-time          2
2   09/25/2008      full-time          1
3   09/23/2015      full-time          5
3   09/23/2013      full-time          4

क्या ऐसे कर्मचारियों की खोज करना संभव है जिनके पास कर्मचारी_टाइप "इंटर्न" के साथ एक पंक्ति है, और तालिका में इसके ऊपर की पंक्ति (बाद की तारीख के साथ आईडी) कर्मचारी के साथ "पूर्णकालिक" है।

इस मामले में, आईडी 1 मेरी आवश्यकता को पूरा करता है।

आपका बहुत बहुत धन्यवाद!

उत्तर:

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

यह मानते हुए कि पिछली तारीख के साथ आपका वही आईडी है, तो आप उपयोग कर सकते हैं lag(), अधिकांश डेटाबेस द्वारा समर्थित ANSI मानक फ़ंक्शन:

select t.*
from table t
where t.id in (select id
from (select t.*,
lag(employee_type) over (partition by id order by date) as prev_et
from table t
) tt
where tt.employee_type = "intern" and tt.prev_et = "full-time"
);

यदि आपका डेटाबेस t "समर्थन नहीं करता है lag(), आप सहसंबद्ध उपश्रेणियों के साथ कुछ ऐसा ही कर सकते हैं।


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

मेरा मानना ​​है कि अनुरोध isn "t जैसा कि प्रश्न में वर्णित है, इसके बजाय आप जो चाहते हैं वह उन लोगों के लिए सभी पंक्तियों की सूची है जो इंटर्न हैं।

SELECT
t1.*
FROM yourtable AS t1
INNER JOIN (
SELECT DISTINCT
id
FROM yourtable
WHERE employee_type = "intern"
) AS t2 ON t1.id = t2.id
;

वैकल्पिक रूप से आप केवल उन लोगों को चाह रहे होंगे जो "इंटर्न" और "पूर्णकालिक" दोनों हैं, जिस स्थिति में आप नीचे दिए गए क्वेरी का उपयोग कर सकते हैं जो एक HAVING खंड का उपयोग करता है:

SELECT
t1.*
FROM yourtable AS t1
INNER JOIN (
SELECT id
FROM yourtable
WHERE employee_type = "intern"
OR employee_type = "full-time"
GROUP BY id
HAVING COUNT(DISTINCT employee_type) > 1
) AS t2 ON t1.id = t2.id
;