Forums before death by AOL, social media and spammers... "We can't have nice things"
|    comp.databases.oracle    |    Overblown overpriced overengineered SHIT    |    2,288 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 1,010 of 2,288    |
|    VC to Philip Hachey    |
|    Re: Need help with SQL Query    |
|    24 Jan 04 00:59:11    |
      XPost: comp.database.oracle       From: boston103@hotmail.com              Hello Philip,              Given:              create table Pay (EmpNo int, PostDate date, Amt int);              insert into pay values(1010, '10-JAN-04', 2163);       insert into pay values(1010, '17-JAN-04', 2645);       insert into pay values(1010, '24-JAN-04', 2313);       insert into pay values(1010, '31-JAN-04', 2354);       insert into pay values(1011, '10-JAN-04', 2321);       insert into pay values(1011, '17-JAN-04', 2211);       insert into pay values(1011, '24-JAN-04', 2242);       insert into pay values(1011, '31-JAN-04', 2211);       insert into pay values(1012, '17-JAN-04', 2433);       insert into pay values(1012, '24-JAN-04', 2246);       insert into pay values(1012, '31-JAN-04', 2235);       insert into pay values(1013, '17-JAN-04', 2766);       insert into pay values(1013, '24-JAN-04', 2661);       insert into pay values(1013, 31-JAN-04', 2627);              create table Chg(EmpNo int, Act varchar(10), Grp varchar(10), EffDate       date);              insert into Chg values(1010, 'New', 'AAAA', '12-FEB-01');       insert into Chg values(1011, 'New', 'CCCC', '11-NOV-02');       insert into Chg values(1011, 'Upd', 'BBBB', '18-JAN-04');       insert into Chg values(1012, 'New', 'EEEE', '11-JAN-04');       insert into Chg values(1013, 'New', 'DDDD', '11-JAN-04');       insert into Chg values(1013, 'Upd', 'BBBB', '18-JAN-04');       insert into Chg values(1013, 'Upd', 'AAAA', '25-JAN-04');              One way would be:              select pay.empno, pay.postdate, pay.amt, chg.grp       from pay, chg       where pay.empno=chg.empno        and (pay.empno, postdate, effdate) in (select pay.empno, postdate,       max(effdate) from        pay, chg        where pay.empno=chg.empno and postdate >=       effdate        group by pay.empno, postdate)                     ... and another, faster method:                     select empno, postdate, amt, grp from        (select pay.empno, pay.postdate, pay.amt, chg.grp,        row_number() over (partition by pay.empno, postdate order by effdate       desc) rn        from pay, chg        where pay.empno=chg.empno and postdate >= effdate)       where rn = 1                     EMPNO POSTDATE AMT GRP       1010 1/10/2004 2163 AAAA       1010 1/17/2004 2645 AAAA       1010 1/24/2004 2313 AAAA       1010 1/31/2004 2354 AAAA       1011 1/10/2004 2321 CCCC       1011 1/17/2004 2211 CCCC       1011 1/24/2004 2242 BBBB       1011 1/31/2004 2211 BBBB       1012 1/17/2004 2433 EEEE       1012 1/24/2004 2246 EEEE       1012 1/31/2004 2235 EEEE       1013 1/17/2004 2766 DDDD       1013 1/24/2004 2661 BBBB       1013 1/31/2004 2627 AAAA              Rgds.              VC              "Philip Hachey" |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca