For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!
Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.
WITH table1 AS( SELECT To_Date('3/13/2010','mm/dd/yyyy') date1, 'john' name FROM dual UNION ALL SELECT To_Date('3/17/2010','mm/dd/yyyy') date1, 'smith' name FROM dual ), table2 AS( SELECT To_Date('1/16/2010','mm/dd/yyyy') date1 FROM dual UNION ALL SELECT To_Date('3/12/2010','mm/dd/yyyy') date1 FROM dual UNION all SELECT To_Date('3/16/2010','mm/dd/yyyy') date1 FROM dual UNION ALL SELECT To_Date('3/20/2010','mm/dd/yyyy') date1 FROM dual UNION ALL SELECT To_Date('3/25/2010','mm/dd/yyyy') date1 FROM dual UNION all SELECT To_Date('4/20/2010','mm/dd/yyyy') date1 FROM dual) select date1, (select case max(case when b.date1 >= a.date1 then 1 else 0 end) when 1 then max(b.name) Keep(Dense_Rank First order by case when b.date1 >= a.date1 then 0 else 1 end,b.date1) else max(b.name) Keep(Dense_Rank Last order by b.date1) end from table1 b) as NAME from table2 a; DATE1 NAME -------- ----- 10-01-16 john 10-03-12 john 10-03-16 smith 10-03-20 smith 10-03-25 smith 10-04-20 smith
WITH table1 AS( SELECT 111 ind, To_Date('3/13/2010','mm/dd/yyyy') date1, 'john' name FROM dual UNION ALL SELECT 111 ind,To_Date('3/17/2010','mm/dd/yyyy') date1, 'smith' name FROM dual UNION all SELECT 112 ind, To_Date('3/12/2010','mm/dd/yyyy') date1, 'john' name FROM dual UNION ALL SELECT 112 ind,To_Date('3/18/2010','mm/dd/yyyy') date1, 'smith' name FROM dual ), table2 AS( SELECT 111 ind,To_Date('1/16/2010','mm/dd/yyyy') date1 FROM dual UNION ALL SELECT 111 ind,To_Date('3/12/2010','mm/dd/yyyy') date1 FROM dual UNION all SELECT 111 ind,To_Date('3/16/2010','mm/dd/yyyy') date1 FROM dual UNION ALL SELECT 111 ind,To_Date('3/20/2010','mm/dd/yyyy') date1 FROM dual UNION ALL SELECT 111 ind,To_Date('3/25/2010','mm/dd/yyyy') date1 FROM dual UNION all SELECT 111 ind,To_Date('4/20/2010','mm/dd/yyyy') date1 FROM dual union ALL SELECT 112 ind,To_Date('1/16/2010','mm/dd/yyyy') date1 FROM dual UNION ALL SELECT 112 ind,To_Date('3/12/2010','mm/dd/yyyy') date1 FROM dual UNION all SELECT 112 ind,To_Date('3/16/2010','mm/dd/yyyy') date1 FROM dual UNION ALL SELECT 112 ind,To_Date('4/20/2010','mm/dd/yyyy') date1 FROM dual )
IND DATE1 NAME ---- -------- ----- 111 10-01-16 john 111 10-03-12 john 111 10-03-16 smith 111 10-03-20 smith 111 10-03-25 smith 111 10-04-20 smith 112 10-01-16 john 112 10-03-12 john 112 10-03-16 smith 112 10-04-20 smith
WITH table1 AS( SELECT To_Date('3/13/2010','mm/dd/yyyy') date1, 'john' name FROM dual UNION ALL SELECT To_Date('3/17/2010','mm/dd/yyyy') date1, 'smith' name FROM dual ), table2 AS( SELECT To_Date('1/16/2010','mm/dd/yyyy') date1 FROM dual UNION ALL SELECT To_Date('3/12/2010','mm/dd/yyyy') date1 FROM dual UNION all SELECT To_Date('3/16/2010','mm/dd/yyyy') date1 FROM dual UNION ALL SELECT To_Date('3/20/2010','mm/dd/yyyy') date1 FROM dual UNION ALL SELECT To_Date('3/25/2010','mm/dd/yyyy') date1 FROM dual UNION all SELECT To_Date('4/20/2010','mm/dd/yyyy') date1 FROM dual) select date1,name from (select a.date1,b.name, Row_Number() over(partition by a.date1 order by b.date1) as rn from table2 a Join (select date1,name, max(date1) over() as maxData1 from table1) b on a.date1 <= b.date1 or b.date1=b.maxData1) where rn=1; DATE1 NAME -------- ----- 10-01-16 john 10-03-12 john 10-03-16 smith 10-03-20 smith 10-03-25 smith 10-04-20 smith
select IND,date1, (select case max(case when b.date1 >= a.date1 then 1 else 0 end) when 1 then max(b.name) Keep(Dense_Rank First order by case when b.date1 >= a.date1 then 0 else 1 end,b.date1) else max(b.name) Keep(Dense_Rank Last order by b.date1) end from table1 b where b.ind = a.ind) as NAME from table2 a order by IND,DATE1; IND DATE1 NAME --- -------- ----- 111 10-01-16 john 111 10-03-12 john 111 10-03-16 smith 111 10-03-20 smith 111 10-03-25 smith 111 10-04-20 smith 112 10-01-16 john 112 10-03-12 john 112 10-03-16 smith 112 10-04-20 smith
select ind,date1,name from (select a.ind,a.date1,b.name, Row_Number() over(partition by a.ind,a.date1 order by b.date1) as rn from table2 a Join (select date1,name,ind, max(date1) over(partition by ind) as maxData1 from table1) b on a.ind = b.ind and (a.date1 <= b.date1 or b.date1=b.maxData1)) where rn=1 order by IND,DATE1; IND DATE1 NAME --- -------- ----- 111 10-01-16 john 111 10-03-12 john 111 10-03-16 smith 111 10-03-20 smith 111 10-03-25 smith 111 10-04-20 smith 112 10-01-16 john 112 10-03-12 john 112 10-03-16 smith 112 10-04-20 smith