Hi David,

Still doesnt work...!!

Let me give some more details...

Your query first takes the record which has max(effv_date) date and if
max(effv_date) > SYSDATE then it omits the product. This shouldn't happen.

Example:

  * *  *Product_id * *  effv_date* *       zone* 868735 1-Jul-09 2 868735
4-Aug-09 2 868735 15-Jul-09 2 868735 26-Aug-09 2

For the above given product: 868735 in a zone 2 has max(effv_date)  =
26-Aug-09. Which is more than SYSDATE so your query drops the product..

*Desired out:*

*Product_ID    effv_date       zone*
868735           1-Jul-09            2

*In short*: First, we have to select the record which has effv_date <
SYSDATE group by product_id, zone. Among the resultant records we need to
select max(effv_date) records.


On Fri, Jul 10, 2009 at 7:00 PM, ddf <orat...@msn.com> wrote:

>
>
>
> On Jul 10, 6:03 am, Mayank <mayank.del...@gmail.com> wrote:
> > hi,
> >
> > hope u'll come out from ur problem..
> >
> > SELECT PRODUCT_ID,ZONE,MAX(EFFV_DATE)
> > FROM  PL_GRP
> > WHERE EFFV_DATE < TO_DATE('13-JUL-09','DD-MON-YY')  -- 13-JUL-09 TAKEN
> > AS SYSDATE
> > GROUP BY PRODUCT_ID,ZONE
> >
> > Mayank
> >
> > On Jul 10, 3:43 pm, Roopesh S <sro...@gmail.com> wrote:
> >
> >
> >
> > > Hi There,
> >
> > > I want to select a product_id for a zone which has a max effv_date
> which is
> > > less then sysdate. Please consider that sysdate is '13-July-2009'
> >
> > > PS: There can be many products which in the same zone. As given in the
> > > example below.
> >
> > > *Example data:*
> >
> > >  *  *  *product_id* *       zone* *                    effv_date * 123
> 1
> > > 10-Jul-09 123 1 11-Jul-09 123 1 12-Jul-09 234 1 9-Jul-09 234 1 8-Jul-09
> 456
> > > 2 5-Jul-09 456 2 6-Jul-09    * *
> > > *Output expected*
> > > * *
> > >   *product_id* *zone* *effv_date* 123 1 12-Jul-09 234 1 9-Jul-09 456 2
> > > 6-Jul-09
> >
> > > Please let me know your inputs..
> >
> > > Thanx'N'Regards
> > > Roopesh- Hide quoted text -
> >
> > - Show quoted text -
>
> SQL> --
> SQL> -- Create table
> SQL> --
> SQL>
> SQL> create table proddt(
>  2          product_id number,
>  3          zone number,
>  4          eff_date date
>  5  );
>
> Table created.
>
> SQL>
> SQL> --
> SQL> -- Populate table
> SQL> --
> SQL>
> SQL> insert all
>  2  into proddt
>  3  values(123, 1, to_date('10-Jul-09','dd-mon-rr'))
>  4  into proddt
>  5  values(123, 1, to_date('11-Jul-09','dd-mon-rr'))
>  6  into proddt
>  7  values(123, 1, to_date('12-Jul-09','dd-mon-rr'))
>  8  into proddt
>  9  values(234, 1, to_date('9-Jul-09','dd-mon-rr'))
>  10  into proddt
>  11  values(234, 1, to_date('8-Jul-09','dd-mon-rr'))
>  12  into proddt
>  13  values(456, 2, to_date('5-Jul-09','dd-mon-rr'))
>  14  into proddt
>  15  values(456, 2, to_date('6-Jul-09','dd-mon-rr'))
>  16  select * from dual;
>
> 7 rows created.
>
> SQL>
> SQL> commit;
>
> Commit complete.
>
> SQL>
> SQL> --
> SQL> -- Doesn't give correct results
> SQL> -- but does provide desired results for
> SQL> -- sample data provided
> SQL> --
> SQL> -- Query ignores all data with an EFF_DATE
> SQL> -- greater than SYSDATE
> SQL> --
> SQL>
> SQL> SELECT PRODUCT_ID,ZONE,MAX(EFF_DATE)
>  2  FROM  PRODDT
>  3  WHERE EFF_DATE < TO_DATE('13-JUL-09','DD-MON-YY')  -- 13-JUL-09
> TAKEN AS SYSDATE
>  4  GROUP BY PRODUCT_ID,ZONE ;
>
> PRODUCT_ID       ZONE MAX(EFF_DATE)
> ---------- ---------- --------------------
>       123          1 12-JUL-2009 00:00:00
>       234          1 09-JUL-2009 00:00:00
>       456          2 06-JUL-2009 00:00:00
>
> SQL>
> SQL> --
> SQL> -- Provides desired data
> SQL> -- and provides correct results regardless
> SQL> -- of value for SYSDATE
> SQL> --
> SQL>
> SQL> select product_id, zone, max(eff_date) eff_date
>  2  from proddt
>  3  group by product_id, zone
>  4  having max(eff_date) < to_date('13-jul-09','dd-mon-rr')
>  5  /
>
> PRODUCT_ID       ZONE EFF_DATE
> ---------- ---------- --------------------
>       123          1 12-JUL-2009 00:00:00
>       234          1 09-JUL-2009 00:00:00
>       456          2 06-JUL-2009 00:00:00
>
> SQL>
> SQL> --
> SQL> -- Insert more data
> SQL> --
> SQL>
> SQL> insert all
>  2  into proddt
>  3  values(123, 1, to_date('15-Jul-09','dd-mon-rr'))
>  4  into proddt
>  5  values(123, 1, to_date('14-Jul-09','dd-mon-rr'))
>  6  into proddt
>  7  values(123, 1, to_date('16-Jul-09','dd-mon-rr'))
>  8  into proddt
>  9  values(234, 1, to_date('19-Jul-09','dd-mon-rr'))
>  10  into proddt
>  11  values(234, 1, to_date('18-Jul-09','dd-mon-rr'))
>  12  into proddt
>  13  values(456, 2, to_date('15-Jul-09','dd-mon-rr'))
>  14  into proddt
>  15  values(456, 2, to_date('16-Jul-09','dd-mon-rr'))
>  16  select * from dual;
>
> 7 rows created.
>
> SQL>
> SQL> commit;
>
> Commit complete.
>
> SQL>
> SQL> --
> SQL> -- Run queries again
> SQL> --
> SQL> -- No records should be returned according to
> SQL> -- specification by OP that max(eff_date) must be
> SQL> -- less than SYSDATE
> SQL> --
> SQL>
> SQL> --
> SQL> -- Gives same results as before
> SQL> -- even though max(eff_date) is greater than
> SQL> -- SYSDATE
> SQL> --
> SQL>
> SQL> SELECT PRODUCT_ID,ZONE,MAX(EFF_DATE)
>  2  FROM  PRODDT
>  3  WHERE EFF_DATE < TO_DATE('13-JUL-09','DD-MON-YY')  -- 13-JUL-09
> TAKEN AS SYSDATE
>  4  GROUP BY PRODUCT_ID,ZONE ;
>
> PRODUCT_ID       ZONE MAX(EFF_DATE)
> ---------- ---------- --------------------
>       123          1 12-JUL-2009 00:00:00
>       234          1 09-JUL-2009 00:00:00
>       456          2 06-JUL-2009 00:00:00
>
> SQL>
> SQL> --
> SQL> -- Gives correct results
> SQL> --
> SQL>
> SQL> select product_id, zone, max(eff_date) eff_date
>  2  from proddt
>  3  group by product_id, zone
>  4  having max(eff_date) < to_date('13-jul-09','dd-mon-rr')
>  5  /
>
> no rows selected
>
> SQL>
>
>
>
> David Fitzjarrell
>  >
>


-- 
Thanx'N'Regards
Roopesh

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Oracle PL/SQL" group.
To post to this group, send email to Oracle-PLSQL@googlegroups.com
To unsubscribe from this group, send email to
oracle-plsql-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/Oracle-PLSQL?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to