ओरेकल एसक्यूएल नौसिखिया यहां और पहली बार पोस्टर।मर्ज तिथि
मैंने सोचा कि यह तब तक आसान होगा जब तक मुझे एहसास नहीं हुआ कि मैं वापस असाइनमेंट को विभाजित करने का तरीका नहीं समझ सकता। मैं पहले से ही अप्रत्याशित परिणाम के साथ नीचे इस की कोशिश की है ASGN
ID ST_DT END_DT POS LOCN STATUS WAGE_CD
-- ---------- ---------- ----- ---- ------ -------
A 12-31-2006 08-16-2009 CLERK LAX 3 A
A 08-17-2009 10-04-2009 CLERK LAX 0 Z
A 10-05-2009 06-30-2010 OPR NYC 3 A
A 07-01-2010 12-31-2010 OPR NYC 3 B
A 01-01-2011 06-30-2012 OPR NYC 3 C
A 07-01-2012 04-09-2013 OPR NYC 3 D
A 04-10-2013 06-30-2013 CLERK LAX 3 A
A 07-01-2013 08-10-2014 CLERK LAX 3 B
A 07-01-2013 08-10-2014 CLERK LAX 3 C
B 04-10-2013 05-31-2013 SUP LAX 3 A
B 06-01-2013 06-30-2014 SUP LAX 0 Z
B 07-01-2013 08-10-2014 SUP LAX 3 B
B 08-11-2014 08-11-2014 CLERK NYC 3 A
B 08-12-2014 01-11-2015 SUP LAX 3 A
B 01-12-2015 02-10-2016 SUP LAX 3 B
B 02-11-2016 08-12-2016 OPER SFO 3 A
B 02-11-2016 08-12-2016 OPER SFO 3 B
:
यहाँ मेरी कार्य तालिका है।
SELECT *
FROM (
SELECT ID
,MIN(ST_DT) ST_DT
,MAX(END_DT) END_DT
,POS
,LOCN
,STATUS
FROM ASGN
GROUP BY ID, LOCN, POS, STATUS
) SUBQRY
ORDER BY ID, ST_DT
अप्रत्याशित परिणाम, लेकिन समझ में आता है। यह वह जगह है जहां रिटर्न असाइनमेंट पिछले असाइनमेंट के साथ संयुक्त नहीं होते हैं।
ID ST_DT END_DT POS LOCN STATUS
-- ---------- ---------- ----- ---- ------
A 12-31-2006 08-10-2014 CLERK LAX 3
A 08-17-2009 10-04-2009 CLERK LAX 0
A 10-05-2009 04-09-2010 OPR NYC 3
B 04-10-2013 02-10-2015 SUP LAX 3
B 06-01-2013 06-30-2014 SUP LAX 0
B 08-11-2014 08-11-2014 CLERK NYC 3
B 02-11-2016 08-12-2016 OPER SFO 3
और परिणाम मैं चाहते हैं देखने के लिए जहां आसन्न दिनांकों आईडी, स्थिति, स्थान के आधार पर जोड़ दिया जाता है, और स्थिति:
ID ST_DT END_DT POS LOCN STATUS
-- ---------- ---------- ----- ---- ------
A 12-31-2006 08-16-2009 CLERK LAX 3
A 08-17-2009 10-04-2009 CLERK LAX 0
A 10-05-2009 04-09-2010 OPR NYC 3
A 04-10-2013 08-10-2014 CLERK LAX 3
B 04-10-2013 05-31-2013 SUP LAX 3
B 06-01-2013 06-30-2014 SUP LAX 0
B 07-01-2013 08-10-2014 SUP LAX 3
B 08-11-2014 08-11-2014 CLERK NYC 3
B 08-12-2014 02-10-2015 SUP LAX 3
B 02-11-2016 08-12-2016 OPER SFO 3
मैं एक अधिक मौसम Oracle SQL प्रोग्रामर पूछा और वह मैंने कहा हमारे पास पीएलएसक्यूएल है, लेकिन मुझे लगता है कि एसक्यूएल के माध्यम से यह काम करने का एक तरीका होना चाहिए।
स्थापना परीक्षण स्क्रिप्ट:
create table asgn
(id varchar2(10)
,st_dt date
,end_dt date
,pos varchar2(10)
,locn varchar2(10)
,status number
,wage_cd varchar2(10));
insert into asgn values('A',to_date('12-31-2006','mm-dd-yyyy'),to_date('08-16-2009','mm-dd-yyyy'),'CLERK','LAX',3,'A');
insert into asgn values('A',to_date('08-17-2009','mm-dd-yyyy'),to_date('10-04-2009','mm-dd-yyyy'),'CLERK','LAX',0,'Z');
insert into asgn values('A',to_date('10-05-2009','mm-dd-yyyy'),to_date('06-30-2010','mm-dd-yyyy'),'OPR','NYC',3,'A');
insert into asgn values('A',to_date('07-01-2010','mm-dd-yyyy'),to_date('12-31-2010','mm-dd-yyyy'),'OPR','NYC',3,'B');
insert into asgn values('A',to_date('01-01-2011','mm-dd-yyyy'),to_date('06-30-2012','mm-dd-yyyy'),'OPR','NYC',3,'C');
insert into asgn values('A',to_date('07-01-2012','mm-dd-yyyy'),to_date('04-09-2013','mm-dd-yyyy'),'OPR','NYC',3,'D');
insert into asgn values('A',to_date('04-10-2013','mm-dd-yyyy'),to_date('06-30-2013','mm-dd-yyyy'),'CLERK','LAX',3,'A');
insert into asgn values('A',to_date('07-01-2013','mm-dd-yyyy'),to_date('08-10-2014','mm-dd-yyyy'),'CLERK','LAX',3,'B');
insert into asgn values('A',to_date('07-01-2013','mm-dd-yyyy'),to_date('08-10-2014','mm-dd-yyyy'),'CLERK','LAX',3,'C');
insert into asgn values('B',to_date('04-10-2013','mm-dd-yyyy'),to_date('05-31-2013','mm-dd-yyyy'),'SUP','LAX',3,'A');
insert into asgn values('B',to_date('06-01-2013','mm-dd-yyyy'),to_date('06-30-2014','mm-dd-yyyy'),'SUP','LAX',0,'Z');
insert into asgn values('B',to_date('07-01-2013','mm-dd-yyyy'),to_date('08-10-2014','mm-dd-yyyy'),'SUP','LAX',3,'B');
insert into asgn values('B',to_date('08-11-2014','mm-dd-yyyy'),to_date('08-11-2014','mm-dd-yyyy'),'CLERK','NYC',3,'A');
insert into asgn values('B',to_date('08-12-2014','mm-dd-yyyy'),to_date('01-11-2015','mm-dd-yyyy'),'SUP','LAX',3,'A');
insert into asgn values('B',to_date('01-12-2015','mm-dd-yyyy'),to_date('02-10-2016','mm-dd-yyyy'),'SUP','LAX',3,'B');
insert into asgn values('B',to_date('02-11-2016','mm-dd-yyyy'),to_date('08-12-2016','mm-dd-yyyy'),'OPER','SFO',3,'A');
insert into asgn values('B',to_date('02-11-2016','mm-dd-yyyy'),to_date('08-12-2016','mm-dd-yyyy'),'OPER','SFO',3,'B');
यह बहुत अच्छा है! धन्यवाद! कर्मचारी ए के लिए दो पंक्तियों के साथ, मैं दिखाना चाहता था कि दोनों के बीच WAGE_CD के बीच एक अंतर था। मैं तालिका में एक और स्तर की जानकारी जोड़ सकता था, लेकिन आगे किसी भी भ्रमित नहीं करना चाहता था। अब, मुझे केवल ओआरए -01841: (पूर्ण) वर्ष ... त्रुटि है जो मुझे प्राप्त हो रही है। – krwoibnvts