Take a look at the windowing functions under 'ana;ytic functions' in the data warehouse guide...They are very very cool..
hth connor --- Jack van Zanen <[EMAIL PROTECTED]> wrote: > Maybe having a bad hairday but following code will > give me for every period > number the sum of all work in progress for the > period plus the previous 12 > periods. Basically it takes the period number from > the current record and > sums a column of that record with the previous 12 > periods. > > year period value > 2000 1 1 > 2000 2 2 > 2000 3 3 > 2000 4 4 > 2000 5 5 > 2000 6 6 > 2000 7 7 > 2000 8 8 > 2000 9 9 > 2000 10 10 > 2000 11 11 > 2000 12 12 > 2001 1 13 > 2001 2 14 > 2001 3 15 > > So for period 2001 1 I need the values 1 thru 13 > added together (91) > Period 2001 2 needs to be the values 2 thru 14 added > together (104) > etc.... > > As you maybe can imagine the explain plan for this > baby is 4 full > tablescans on quite large tables. (see below) > > My question is if somebody has a better solution to > handle this query????? > > Oracle 8.0.5 !!! > AIX 4.3.3 > > > SELECT V1.ENGAGEMENT > , V1.YEAR > , V1.PERIOD > , MAX(V1.NET_FEE_EARNED_PTD) > , MAX(V1.EXP_WIP_VAL_PTD) > , SUM(V2.TIME_WIP_VAL) > , MAX(V1.GNRL_WON) > , MAX(V1.GNRL_WOFF) > , MAX(V1.TIME_WOFF) > , MAX(V1.WIP_PROV) > , MAX(V1.EXP_WOFF) > , MAX(V1.DB_WOFF) > , MAX(V1.DB_PROV) > FROM > ( > select max(WSTAT.ENG_NUMB) AS ENGAGEMENT, > max(WSTAT.FNANCL_YEAR) AS YEAR, > max(WSTAT.PRD_NUMB) AS PERIOD, > SUM(NVL(WSTAT.TIME_WIP_VAL_PTD, 0)) > + SUM(NVL(WSTAT.GNRL_W_ON_PTD, 0)) > - SUM(NVL(WSTAT.GNRL_W_OFF_PTD, 0)) > - SUM(NVL(WSTAT.TIME_WIP_VAL_W_OFF_PTD, > 0)) > - SUM(NVL(WSTAT.WIP_PRVSN_PTD, 0)) > - SUM(NVL(WSTAT.EXP_WIP_VAL_W_OFF_PTD, > 0)) > - SUM(NVL(DSTAT.DBTRS_W_OFF_PTD, 0)) > - SUM(NVL(DSTAT.DBTRS_PRVSN_PTD, 0)) > NET_FEE_EARNED_PTD, > SUM(NVL(WSTAT.EXP_WIP_VAL_PTD,0)) > EXP_WIP_VAL_PTD, > SUM(NVL(WSTAT.TIME_WIP_VAL_PTD, 0)) > TIME_WIP_VAL, > SUM(NVL(WSTAT.GNRL_W_ON_PTD, 0)) > GNRL_WON, > SUM(NVL(WSTAT.GNRL_W_OFF_PTD, 0)) > GNRL_WOFF, > SUM(NVL(WSTAT.TIME_WIP_VAL_W_OFF_PTD, > 0)) TIME_WOFF, > SUM(NVL(WSTAT.WIP_PRVSN_PTD, 0)) > WIP_PROV, > SUM(NVL(WSTAT.EXP_WIP_VAL_W_OFF_PTD, 0)) > EXP_WOFF, > SUM(NVL(DSTAT.DBTRS_W_OFF_PTD, 0)) > DB_WOFF, > SUM(NVL(DSTAT.DBTRS_PRVSN_PTD, 0)) > DB_PROV > FROM ENG_WIP_STATS WSTAT, > ENG_DBTRS_STATS DSTAT > WHERE WSTAT.ENG_NUMB(+)=DSTAT.ENG_NUMB > AND WSTAT.FNANCL_YEAR=DSTAT.FNANCL_YEAR > AND WSTAT.PRD_NUMB=DSTAT.PRD_NUMB > GROUP BY WSTAT.ENG_NUMB, > WSTAT.FNANCL_YEAR, > WSTAT.PRD_NUMB > ) v1, > ( > select max(WSTAT.ENG_NUMB) AS ENGAGEMENT, > max(WSTAT.FNANCL_YEAR) AS YEAR, > max(WSTAT.PRD_NUMB) AS PERIOD, > SUM(NVL(WSTAT.TIME_WIP_VAL_PTD, 0)) > + SUM(NVL(WSTAT.GNRL_W_ON_PTD, 0)) > - SUM(NVL(WSTAT.GNRL_W_OFF_PTD, 0)) > - SUM(NVL(WSTAT.TIME_WIP_VAL_W_OFF_PTD, > 0)) > - SUM(NVL(WSTAT.WIP_PRVSN_PTD, 0)) > - SUM(NVL(WSTAT.EXP_WIP_VAL_W_OFF_PTD, > 0)) > - SUM(NVL(DSTAT.DBTRS_W_OFF_PTD, 0)) > - SUM(NVL(DSTAT.DBTRS_PRVSN_PTD, 0)) > NET_FEE_EARNED_PTD, > SUM(NVL(WSTAT.EXP_WIP_VAL_PTD,0)) > EXP_WIP_VAL_PTD, > SUM(NVL(WSTAT.TIME_WIP_VAL_PTD, 0)) > TIME_WIP_VAL, > SUM(NVL(WSTAT.GNRL_W_ON_PTD, 0)) > GNRL_WON, > SUM(NVL(WSTAT.GNRL_W_OFF_PTD, 0)) > GNRL_WOFF, > SUM(NVL(WSTAT.TIME_WIP_VAL_W_OFF_PTD, > 0)) TIME_WOFF, > SUM(NVL(WSTAT.WIP_PRVSN_PTD, 0)) > WIP_PROV, > SUM(NVL(WSTAT.EXP_WIP_VAL_W_OFF_PTD, 0)) > EXP_WOFF, > SUM(NVL(DSTAT.DBTRS_W_OFF_PTD, 0)) > DB_WOFF, > SUM(NVL(DSTAT.DBTRS_PRVSN_PTD, 0)) > DB_PROV > FROM ENG_WIP_STATS WSTAT, > ENG_DBTRS_STATS DSTAT > WHERE WSTAT.ENG_NUMB(+)=DSTAT.ENG_NUMB > AND WSTAT.FNANCL_YEAR=DSTAT.FNANCL_YEAR > AND WSTAT.PRD_NUMB=DSTAT.PRD_NUMB > GROUP BY WSTAT.ENG_NUMB, > WSTAT.FNANCL_YEAR, > WSTAT.PRD_NUMB > ) V2 > WHERE v1.ENGAGEMENT=V2.ENGAGEMENT(+) > AND TO_DATE(V2.YEAR(+)||V2.PERIOD(+),'YYYYMM') >= > ADD_MONTHS(TO_DATE(V1.YEAR||V1.PERIOD,'YYYYMM'),-12) > AND TO_DATE(V2.YEAR(+)||V2.PERIOD(+),'YYYYMM') <= > TO_DATE(V1.YEAR||V1.PERIOD,'YYYYMM') > GROUP BY V1.ENGAGEMENT > , V1.YEAR > , V1.PERIOD > > > > Explain plan: > > ID PID QUERY_PLAN > ----- ----- > ------------------------------------------------------------------------------------ > 0 SELECT STATEMENT Cost = 12531921 > 1 0 SORT GROUP BY Card=62754915 > 2 1 MERGE JOIN OUTER Card=62754915 > 3 2 SORT JOIN Card=1584360 > 4 3 VIEW Card=1584360 > 5 4 SORT GROUP BY Card=1584360 > 6 5 FILTER Card= > 7 6 MERGE JOIN OUTER Card= > 8 7 SORT JOIN Card=1354977 > 9 8 TABLE ACCESS FULL > ENG_DBTRS_STATS > Card=1354977 > 10 7 SORT JOIN Card=1956365 > 11 10 TABLE ACCESS FULL > ENG_WIP_STATS Card=1956365 > 12 2 FILTER Card= > 13 12 SORT JOIN Card= > 14 13 VIEW Card=1584360 > 15 14 SORT GROUP BY Card=1584360 > 16 15 FILTER Card= > 17 16 MERGE JOIN OUTER Card= > 18 17 SORT JOIN > Card=1354977 > 19 18 TABLE ACCESS FULL > ENG_DBTRS_STATS > Card=1354977 > 20 17 SORT JOIN > Card=1956365 > 21 20 TABLE ACCESS FULL > ENG_WIP_STATS > Card=1956365 > > > THX > > =================================================================== > De informatie verzonden in dit e-mailbericht is > vertrouwelijk en is > uitsluitend bestemd voor de geadresseerde. > Openbaarmaking, > vermenigvuldiging, verspreiding en/of verstrekking > van deze informatie aan > derden is, behoudens voorafgaande schriftelijke > toestemming van Ernst & > Young, niet toegestaan. Ernst & Young staat niet in > voor de juiste en > volledige overbrenging van de inhoud van een > verzonden e-mailbericht, noch > voor tijdige ontvangst daarvan. Ernst & Young kan > niet garanderen dat een > verzonden e-mailbericht vrij is van virussen, noch > dat e-mailberichten > worden overgebracht zonder inbreuk of tussenkomst > van onbevoegde derden. > > Indien bovenstaand e-mailbericht niet aan u is > gericht, verzoeken wij u > vriendelijk doch dringend het e-mailbericht te > retourneren aan de verzender > en het origineel en eventuele kopieën te verwijderen > en te vernietigen. > > Ernst & Young hanteert bij de uitoefening van haar > werkzaamheden algemene > voorwaarden, waarin een beperking van > aansprakelijkheid is opgenomen. De > algemene voorwaarden worden u op verzoek kosteloos > toegezonden. > ===================================================================== > The information contained in this communication is > confidential and is > intended solely for the use of the individual or > entity to whom it is > addressed. You should not copy, disclose or > distribute this communication > without the authority of Ernst & Young. Ernst & > Young is neither liable for > the proper and complete transmission of the > information contained in this > communication nor for any delay in its receipt. > Ernst & Young does not > guarantee that the integrity of this communication > has been maintained nor > that the communication is free of viruses, > interceptions or interference. > > If you are not the intended recipient of this > communication please return > the communication to the sender and delete and > destroy all copies. > > In carrying out its engagements, Ernst & Young > applies general terms and > conditions, which contain a clause that limits its > liability. A copy of > these terms and conditions is available on request > free of charge. > =================================================================== > > > > > > -- > Please see the official ORACLE-L FAQ: > http://www.orafaq.com > -- > Author: Jack van Zanen > INET: [EMAIL PROTECTED] > > Fat City Network Services -- (858) 538-5051 FAX: > (858) 538-5051 > San Diego, California -- Public Internet > access / Mailing Lists > -------------------------------------------------------------------- > To REMOVE yourself from this mailing list, send an > E-Mail message > to: [EMAIL PROTECTED] (note EXACT spelling of > 'ListGuru') and in > the message BODY, include a line containing: UNSUB > ORACLE-L > (or the name of mailing list you want to be removed > from). You may > also send the HELP command for other information > (like subscribing). ===== Connor McDonald http://www.oracledba.co.uk http://www.oaktable.net "Remember amateurs built the ark - Professionals built the Titanic" __________________________________________________ Do You Yahoo!? Everything you'll ever need on one web page from News and Sport to Email and Music Charts http://uk.my.yahoo.com -- Please see the official ORACLE-L FAQ: http://www.orafaq.com -- Author: =?iso-8859-1?q?Connor=20McDonald?= INET: [EMAIL PROTECTED] Fat City Network Services -- (858) 538-5051 FAX: (858) 538-5051 San Diego, California -- Public Internet access / Mailing Lists -------------------------------------------------------------------- To REMOVE yourself from this mailing list, send an E-Mail message to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in the message BODY, include a line containing: UNSUB ORACLE-L (or the name of mailing list you want to be removed from). You may also send the HELP command for other information (like subscribing).