If the other solutions perform as well or better, I would definitely go with one of them. My solution is ugly and not scaleable.
On Sun, Feb 13, 2011 at 1:24 AM, gayathri Dev <gd0...@gmail.com> wrote: > hahaha > Fact is - even thou its using Max and substr, which are a familiar ones.. > it took a lil longer for me to understand. ( You are the Master Mike ) > somehow was happy tht i found 2 solutions...and left the 3rd one in > between..:)) > will learn that one too... > > Thanks again to the group. > > > > > > > On Fri, Feb 11, 2011 at 11:52 PM, Michael Moore > <michaeljmo...@gmail.com>wrote: > >> So I guess that means you didn't like my solution. ;-) >> Mike >> >> >> On Fri, Feb 11, 2011 at 9:10 PM, gayathri Dev <gd0...@gmail.com> wrote: >> >>> Thanks All for the suggestions and a clear detailed explanations. >>> >>> I tried both Rich's and Andrej's suggestion. It works..:-) >>> >>> "Keep" is new to me. Thanks for introducing. >>> >>> >>> >>> On Fri, Feb 11, 2011 at 11:41 AM, Richard Pascual <richg...@gmail.com>wrote: >>> >>>> I got this idea from the PSOUG site which describes the different ways >>>> analytical functions can be leveraged. Apparently MAX is one such function >>>> which can be used with a "partition by" directive. Forgive any initial >>>> mistakes as I have yet to test. Just wanted to get an idea out to bounce >>>> amongst our group. >>>> >>>> -- begin query >>>> >>>> select action_results.action_flag from ( >>>> >>>> select p.action_flag, >>>> p.rpt_num, >>>> p.participant_order, >>>> max(p.participant_order) over ( partition by p.rpt_num ) as >>>> max_participant_order >>>> from participants p >>>> where p.role_ind between 1 and 20 ) action_results >>>> >>>> where action_results.participant_order = >>>> action_results.max_participant_order >>>> and action_results.rpt_num = 311118 >>>> >>>> -- end query >>>> >>>> discussion: >>>> my approach still involves a subquery, but I think it is clearer to >>>> understand. The functionality of this SQL snippet is twofold: >>>> >>>> (1) the inner subquery creates a selection of action flags and rpt_num >>>> (report id's) for which the role_ind is between 1 and 20 >>>> >>>> (2) the outer subquery further refines the search to limit the results >>>> to just the action flags for which the participant order is the "max" value >>>> for that given report id and also to where the report id = 311118 >>>> >>>> Now if you were to integrate this into a PL/SQL environment such as a >>>> stored procedure or function, you could parametrize the rpt_num reference >>>> (311118) with a parameter value. I structured the sql query with this in >>>> mind. As it is written, the query only requires the rpt_num reference to be >>>> coded ONCE as opposed to TWICE in the original query concept attempted by >>>> the poster, Gayathri. >>>> >>>> Requiring the same parameter to be used multiple times in the same query >>>> often yields a danger of mistakes (I know "search-and-replace" might >>>> prevent >>>> this, but not always, especially in large programs) as you would have to >>>> exhaustively read through all the code to find all references to rpt_num. >>>> In >>>> my example, you would only need to change that value in one place. >>>> >>>> I really like where Oracle is going with the analytical functions... >>>> while I am relatively new at using them, their utility is already paying >>>> dividends in my coding! >>>> >>>> Rich Pascual >>>> >>>> >>>> >>>> Some great info on Oracle analytical functions: >>>> http://psoug.org/reference/analytic_functions.html >>>> >>>> >>>> >>>> >>>> >>>> Rich Pascual >>>> >>>> >>>> On Fri, Feb 11, 2011 at 11:12 AM, Michael Moore < >>>> michaeljmo...@gmail.com> wrote: >>>> >>>>> Good catch Rich, I assumed they were. >>>>> Mike >>>>> >>>>> >>>>> On Fri, Feb 11, 2011 at 11:06 AM, Richard Pascual >>>>> <richg...@gmail.com>wrote: >>>>> >>>>>> Are the columns, p_order and participant_order different columns? >>>>>> >>>>>> Rich Pascual >>>>>> >>>>>> >>>>>> >>>>>> On Fri, Feb 11, 2011 at 10:49 AM, Michael Moore < >>>>>> michaeljmo...@gmail.com> wrote: >>>>>> >>>>>>> SELECT SUBSTR(MAX(TO_CHAR(p_order, '00000009') || action_flag), 10) >>>>>>> action_flag >>>>>>> FROM participants >>>>>>> >>>>>>> WHERE role_ind BETWEEN 1 AND 20 >>>>>>> AND rpt_num = 311118; >>>>>>> >>>>>>> Mike >>>>>>> >>>>>>> On Fri, Feb 11, 2011 at 12:50 AM, Andrej Hopko >>>>>>> <ado.ho...@gmail.com>wrote: >>>>>>> >>>>>>>> Hi, >>>>>>>> study the KEEP clause, it may work something like this: >>>>>>>> >>>>>>>> SELECT MAX(action_flag) KEEP (DENSE_RANK FIRST ORDER BY p_order DESC >>>>>>>> ) >>>>>>>> >>>>>>>> FROM participants >>>>>>>> WHERE rpt_num = 311118 >>>>>>>> AND role_ind BETWEEN 1 AND 20 >>>>>>>> ; >>>>>>>> >>>>>>>> I am assuming those: >>>>>>>> 1. p_order and participant_order you meant as same column (if >>>>>>>> not, it may still work but I haven't thought about this in deep) >>>>>>>> 2. there may be all kinds of mistakes (I didn't run the query, >>>>>>>> just giving you clues) >>>>>>>> 3. note that MAX after select isn't necessary because KEEP clause >>>>>>>> returns only row with highest p_order, but it is necessary due to >>>>>>>> syntax >>>>>>>> limitation (there need to be aggregation function if remember well - I >>>>>>>> used >>>>>>>> this about a year ago) >>>>>>>> >>>>>>>> all you need now is to clean up the select to correctly return >>>>>>>> data >>>>>>>> >>>>>>>> regards >>>>>>>> hoppo >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On 11. 2. 2011 8:34, gayathri Dev wrote: >>>>>>>> >>>>>>>>> Hi All, >>>>>>>>> Could you please suggest a better way of doing this? >>>>>>>>> SELECT action_flag >>>>>>>>> FROM participants >>>>>>>>> WHERE rpt_num = 311118 >>>>>>>>> AND participant_order = (SELECT MAX(p_order) >>>>>>>>> FROM participants >>>>>>>>> WHERE role_ind BETWEEN 1 AND 20 >>>>>>>>> AND rpt_num = 311118); >>>>>>>>> Thanks, >>>>>>>>> ~G >>>>>>>>> -- >>>>>>>>> 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 >>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> 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 >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> 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 >>>>>>> >>>>>> >>>>>> -- >>>>>> 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 >>>>>> >>>>> >>>>> -- >>>>> 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 >>>>> >>>> >>>> -- >>>> 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 >>>> >>> >>> -- >>> 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 >>> >> >> -- >> 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 >> > > -- > 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 > -- 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