act TABLE transaction(id be go away_go out DATE end_go out DATE,PRIMARY KEY (id start_date end_go out));ALTER TABLE transaction ADD (CONSTRAINT go away_dt UNIQUE (id start_go out));alter delay transaction ADD (CONSTRAINT end_dt UNIQUE (id end_go out));INSERT INTO transaction(id start_go out end_date) VALUES(1. TO_DATE ('01/28/2006'. 'MM/DD/YYYY'),TO_go out ('02/07/2006'. 'MM/DD/YYYY'));INSERT INTO transaction(id go away_date end_go out) VALUES(1. TO_DATE ('02/08/2006'. 'MM/DD/YYYY'),TO_DATE ('02/22/2006'. 'MM/DD/YYYY'));INSERT INTO transaction(id start_date end_date) VALUES(1. TO_DATE ('02/23/2006'. 'MM/DD/YYYY'),TO_DATE ('02/27/2006'. 'MM/DD/YYYY'));attach INTO transaction(id start_date end_date) VALUES(1. TO_DATE ('02/18/2006'. 'MM/DD/YYYY'),TO_go out ('03/29/2006'. 'MM/DD/YYYY'));INSERT INTO transaction(id go away_date end_date) VALUES(1. TO_DATE ('04/08/2006'. 'MM/DD/YYYY'). TO_DATE ('04/09/2006'. 'MM/DD/YYYY'));attach INTO transaction(id start_go out end_go out) VALUES(1. TO_go out ('04/10/2006'. 'MM/DD/YYYY'),TO_go out ('04/13/2006'. 'MM/DD/YYYY'));attach INTO transaction(id go away_date end_date) VALUES(1. TO_DATE ('04/14/2006'. 'MM/DD/YYYY'). TO_go out ('04/17/2006'. 'MM/DD/YYYY'));INSERT INTO transaction(id go away_date end_date) VALUES(1. TO_DATE ('04/28/2006'. 'MM/DD/YYYY'). TO_go out ('05/18/2006'. 'MM/DD/YYYY'));attach INTO transaction(id start_go out end_date) VALUES(1. TO_go out ('01/18/2006'. 'MM/DD/YYYY'). TO_DATE ('01/27/2006'. 'MM/DD/YYYY'));attach INTO transaction(id start_go out end_date) VALUES(2. TO_go out ('01/28/2006'. 'MM/DD/YYYY'). TO_go out ('02/07/2006'. 'MM/DD/YYYY'));INSERT INTO transaction(id start_go out end_date) VALUES(2. TO_go out ('02/08/2006'. 'MM/DD/YYYY'),TO_go out ('02/22/2006'. 'MM/DD/YYYY'));INSERT INTO transaction(id go away_go out end_date) VALUES(2. TO_DATE ('02/23/2006'. 'MM/DD/YYYY'). TO_DATE ('02/27/2006'. 'MM/DD/YYYY'));INSERT INTO transaction(id go away_date end_date) VALUES(2. TO_go out ('04/08/2006'. 'MM/DD/YYYY'). TO_go out ('04/09/2006'. 'MM/DD/YYYY'));attach INTO transaction(id go away_date end_go out) VALUES(2. TO_DATE ('04/10/2006'. 'MM/DD/YYYY'). TO_go out ('04/13/2006'. 'MM/DD/YYYY'));attach INTO transaction(id start_date end_date) VALUES(2. TO_DATE ('04/14/2006'. 'MM/DD/YYYY'). TO_DATE ('04/17/2006'. 'MM/DD/YYYY'));INSERT INTO transaction(id start_date end_date) VALUES(2. TO_DATE ('04/18/2006'. 'MM/DD/YYYY'). TO_go out ('05/18/2006'. 'MM/DD/YYYY'));attach INTO transaction(id start_go out end_go out) VALUES(2. TO_go out ('01/18/2006'. 'MM/DD/YYYY'),TO_DATE ('01/27/2006'. 'MM/DD/YYYY'));INSERT INTO transaction(id start_date end_go out) VALUES(3. TO_DATE ('01/03/2006'. 'MM/DD/YYYY'). TO_go out ('05/16/2006'. 'MM/DD/YYYY'));SQL> decide * from transaction request by id start_go out; ID go away_DAT END_DATE---------- --------- --------- 1 18-JAN-06 27-JAN-06 (Earliest start_go out : 18-JAN-06 ) 1 28-JAN-06 07-FEB-06 1 08-FEB-06 22-FEB-06 1 18-FEB-06 29-MAR-06 (No consecutive trans filter out ) 1 23-FEB-06 27-FEB-06 (Latest end_go out : 27-FEB-06 ) 1 08-APR-06 09-APR-06 (Earliest start_date : 08-APR-06 ) 1 10-APR-06 13-APR-06 1 14-APR-06 17-APR-06 (Latest end_go out : 17-APR-06 ) 1 28-APR-06 18-MAY-06 (No trans with the assort separate out) 2 18-JAN-06 27-JAN-06 (Earliest start_go out : 18-JAN-06 ) 2 28-JAN-06 07-FEB-06 2 08-FEB-06 22-FEB-06 2 23-FEB-06 27-FEB-06 (Latest end_date : 27-FEB-06 ) 2 08-APR-06 09-APR-06 (Earliest start_date : 08-APR-06 ) 2 10-APR-06 13-APR-06 2 14-APR-06 17-APR-06 2 18-APR-06 18-MAY-06 (Latest end_go out : 18-MAY-06 ) 3 03-JAN-06 16-MAY-06 (No trans with the assort separate out) 18 rows selected.
decide id. MAX(earliest_start) earliest_start_date. MAX(latest_end) latest_end_dateFROM(SELECT id go away_date end_date earliest_start,latest_end row_number( ) OVER (PARTITION BY id,lev ORDER BY rn) AS rn FROM (decide id start_date,end_date earliest_start,latest_end rn FROM (SELECT id start_date end_date FROM( decide id go away_date end_go out. LAG (end_date) OVER (PARTITION BY id ORDER BY end_date) +1 lag. LEAD (start_date) OVER (PARTITION BY id request BY start_date)-1 lead FROM transaction ) WHERE start_date = lag OR end_date = lead )MODELPARTITION BY ( id )mark BY(row_number() OVER(divide BY id ORDER BY go away_go out) rn)MEASURES(go away_date end_date. direct(NULL AS DATE) earliest_start. CAST(NULL AS go out) latest_end)RULES(earliest_start[ANY] request BY rn =CASE WHEN start_date[CV()-1] IS NULL OR go away_date[CV()]> end_go out[CV()-1]+1 THEN go away_date[CV( )] END,latest_end[ANY] ORDER BY rn =CASE WHEN end_date[CV()+1] IS NULL OR end_date[CV()]<start_go out[CV()+1]-1 THEN end_go out[CV( )] END )). (decide LEVEL lev FROM dual CONNECT BY LEVEL <= 2)WHERE CASE WHEN Lev = 1 THEN earliest_start WHEN Lev = 2 THEN latest_end END IS NOT NULL)assort BY id rn; ID EARLIEST_ LATEST_END---------- --------- ---------- 1 18-JAN-06 27-FEB-06 1 08-APR-06 17-APR-06 2 18-JAN-06 27-FEB-06 2 08-APR-06 18-MAY-06
SELECT id min(to_date(substr(go away_go out,1. (instr(go away_go out,','. 1)-1)),'DD-MM-YYYY')) earliest_go away_date min(to_date(substr(end_date. (instr(end_date,','. -1)+1)),'DD-MM-YYYY')) latest_end_dateFROM (decide id. LTRIM(sys_cerebrate_by_path(to_burn (start_go out,'DD-MM-YYYY'),','),',') go away_go out. LTRIM(sys_connect_by_path(to_burn (end_go out,'DD-MM-YYYY'),','),',') end_date FROM (SELECT id start_date end_date FROM (SELECT id go away_date end_date. LAG(end_date) OVER (divide BY id ORDER BY end_date) + 1 lag. LEAD(go away_go out) OVER (PARTITION BY id ORDER BY go away_go out) - 1 lead FROM transaction ) WHERE start_go out = lag OR end_go out = bring about ) WHERE CONNECT_BY_ISLEAF =1 cerebrate BY PRIOR end_date + 1 = start_date AND prior id = id )assort BY id to_go out(substr(end_date,(instr(end_go out,',',-1)+1)),'DD-MM-YYYY'); ID EARLIEST_ LATEST_EN---------- --------- --------- 1 18-JAN-06 27-FEB-06 1 08-APR-06 17-APR-06 2 18-JAN-06 27-FEB-06 2 08-APR-06 18-MAY-06
SELECT id min_go out max_dateFROM ( SELECT id start_date end_date connect_by_isleaf isleaf aim levelof. TO_go out( SUBSTR( SYS_cerebrate_BY_PATH( TO_burn( start_date. 'MMDDYYYY' ). '-' ). 2. 8 ). 'MMDDYYYY' ) min_date. ( inspect WHEN CONNECT_BY_ISLEAF = 1 THEN end_date END ) max_date FROM ( SELECT other_id id start_date end_date. ( CASE WHEN start_date = LAG( end_date + 1 ) OVER ( divide BY id ORDER BY end_go out ) THEN LAG( other_id ) OVER ( PARTITION BY id ORDER BY end_date ) END ) contiguous FROM ( SELECT id rownum other_id start_date end_date FROM transaction ) ) START WITH contiguous IS NULL cerebrate BY PRIOR other_id = contiguous )WHERE isleaf = 1 AND levelof > 1; ID MIN_DATE MAX_DATE---------- --------- --------- 1 18-JAN-06 27-FEB-06 1 08-APR-06 17-APR-06 2 18-JAN-06 27-FEB-06 2 08-APR-06 18-MAY-06
Forex Groups - Tips on Trading
Related article:
http://oraqa.com/2007/10/29/how-to-find-the-earliest-start-date-and-the-latest-end-date-for-consecutive-transactions-in-sql/
comments | Add comment | Report as Spam
|