SQL Query using Subquery to get the difference in budget versions

Hi
I am using the following query to find the difference between revenue budget changes from the previous version to latest version. However the second subquery is not working. Has somebody done a similar query before? Any help?
select distinct b.name, b.segment1, a.version_number , a.version_name, a.change_reason_code, a.revenue, f.revenue, a.creation_date, d.full_name
from PA_BUDGET_VERSIONS a, pa_projects_all b, fnd_user c, per_all_people_f d,PA_BUDGET_VERSIONS f
where a.project_id = b.project_id
and a.created_by = c.user_id
and c.employee_id = d.person_id
and a.budget_type_code = 'AR'
and a.budget_status_code = 'B'
and b.org_id in (147,707,140)
and a.version_number in (select max(e.version_number) from PA_BUDGET_VERSIONS e where e.budget_version_id = a.budget_version_id
and a.project_id = e.project_id)
and a.budget_version_id = f.budget_version_id
and f.version_number in (Select max(g.version_number) from PA_BUDGET_VERSIONS g where f.budget_version_id = g.budget_version_id
and f.project_id = g.project_id and g.version_number < a.version_number)
and a.creation_date between '01-JAN-09' and '30-JAN-09'
order by b.segment1;

Analytic functions to the rescue! (Now you'll only have one pass through the pa_budget_version table, instead of four!)
Something like this, perhaps (assuming version_numbers are unique per project_id and budget_version_id):
WITH a AS (SELECT project_id,
                  version_number,
                  version_name,
                  change_reason_code,
                  creation_date,
                  revenue,
                  row_number() over (partition by project_id, budget_version_id
                                     order by version_number desc) rn,
                  lag(revenue) over (partition by project_id, budget_version_id
                                     order by version_number desc) prev_ver_revenue
           FROM   pa_budget_versions
           WHERE  budget_type_code = 'AR'
           AND    budget_status_code = 'B'
           AND    creation_date BETWEEN to_date('01/01/2009', 'dd/mm/yyyy')
                                AND     to_date('30/01/2009', 'dd/mm/yyyy'))
SELECT DISTINCT b.name,
                b.segment1,
                a.version_number,
                a.version_name,
                a.change_reason_code,
                a.revenue,
                a.prev_ver_revenue,
                a.creation_date,
                d.full_name
FROM   a,
       pa_projects_all b,
       fnd_user c,
       per_all_people_f d
WHERE  a.project_id = b.project_id
AND    a.created_by = c.user_id
AND    c.employee_id = d.person_id
AND    b.org_id IN (147, 707, 140)
ORDER BY b.segment1;NB. untested.

Similar Messages

  • How to obtain the transformed SQL query using SEM_MATCH

    Dear all,
    Is it possible to get the transformed relational SQL query when using the SEM_MATCH prefix, by querying directly on the database. We are able to obtain the relational SQL query using Joseki/Jena, however this is not the way to go for us. We would like (if possible) to get it straight from the oracle database by logging or something.
    Kind regards.
    Max

    Hi Max,
    Just to clarify. What SEM_MATCH prefix are you talking about?
    A SEM_MATCH based query is indeed a SQL query as SEM_MATCH is a SQL table function. So if you don't want to go through Java APIs or web service endpoint, then running SEM_MATCH directly should give you what you need. Or maybe you just want to see the underlying generated (from SEM_MATCH) SQL query. If that is true, can you please tell us why?
    Thanks,
    Zhe Wu

  • Query to get the difference between 2 totals from 2 different queries

    I wanted to know if it is possible to get the difference between 2 totals from 2 different queries. I would explain with an example:
    1st query  - Select sum(homepass) from table 1
    2nd query – select sum(homepass) from table2
    Is it possible to display the difference like-
    Select sum(homepass) from table 1 - sum(homepass) from table2
    I know the above query would gives syntax error but is there a better way or a trick to get the above task accomplished from a single query.
    I hope, my question is clear.
    Please revert with the reply to my query.
    Regards

    tomernitin wrote:
    Try this one also:
    WITH adtn1
    AS
    SELECT 110 val1 FROM dual UNION ALL
    SELECT 100 FROM dual UNION ALL
    SELECT 90  FROM dual UNION ALL
    SELECT 10 FROM dual
    adtn2
    AS
    SELECT 10 val2 FROM dual UNION ALL
    SELECT 20 FROM dual UNION ALL
    SELECT 30  FROM dual UNION ALL
    SELECT 100 FROM dual
    SELECT(Sum(a1.val1)-Sum(a2.val2)) Diff FROM adtn1 a1,adtn2 a2;
    let me know if you still have any doubt.
    Um.... I don't think so. Not with the cartesian join between a1 and 2.

  • Query on 0TCT_MC01 to get the last used date of a query

    Dear All,
    I tried to create a query on 0TCT_MC01 to get the last used date of a query.
    Since we do not have readily available key figure for Last used date, could any one help me out to achieve this result?
    I am interested to find the old queries which are not being used anymore.
    Thanks in advance.

    You can get the info from the below tables
    if you are working with BW 3.5 you can look in table RSDDSTAT in BI 7.0 it is RSDDSTAT_OLAP.
    Make a selction on the infocube and the OLAP Statistic Object which is the query ID and execute. Then you should see how often the query was executed, by whom and which date/time.
    in field Statistics Object Name Query ID you type in the tech name of the query
    from the Counter for statistics event calls -- will give the count... no of times the query used least the count lesser the query is used.
    Regards
    KP
    Edited by: Konduru Prashanth. on Dec 22, 2011 2:44 PM

  • Can Portal Report from SQL Query use where column IN (:bind_variable)

    I would like to create a portal report from sql query with IN (:bind_variable) in the where clause. The idea is that the user would enter comma-separated or comma-quote-separated values for the bind_variable. I have tried this several ways but nothing seems to work. Can this be done?
    Trenton

    Hi,
    Which version of portal are you using. This is a bug. It has been fixed in 30984.
    Thanks,
    Sharmila

  • Can we implement the custom sql query in CR for joining the two tables

    Hi All,
    Is there anyway to implement the custom sql query in CR for joining the two tables?
    My requirement here is I need to write sql logics for joining the two tables...
    Thanks,
    Gana

    In the Database Expert, expand the Create New Connection folder and browse the subfolders to locate your data source.
    Log on to your data source if necessary.
    Under your data source, double-click the Add Command node.
    In the Add Command to Report dialog box, enter an appropriate query/command for the data source you have opened.
    For example:
    SELECT
        Customer.`Customer ID`,
        Customer.`Customer Name`,
        Customer.`Last Year's Sales`,
        Customer.`Region`,
        Customer.`Country`,
        Orders.`Order Amount`,
        Orders.`Customer ID`,
        Orders.`Order Date`
    FROM
        Customer Customer INNER JOIN Orders Orders ON
            Customer.`Customer ID` = Orders.`Customer ID`
    WHERE
        (Customer.`Country` = 'USA' OR
        Customer.`Country` = 'Canada') AND
        Customer.`Last Year's Sales` < 10000.
    ORDER BY
        Customer.`Country` ASC,
        Customer.`Region` ASC
    Note: The use of double or single quotes (and other SQL syntax) is determined by the database driver used by your report. You must, however, manually add the quotes and other elements of the syntax as you create the command.
    Optionally, you can create a parameter for your command by clicking Create and entering information in the Command Parameter dialog box.
    For more information about creating parameters, see To create a parameter for a command object.
    Click OK.
    You are returned to the Report Designer. In the Field Explorer, under Database Fields, a Command table appears listing the database fields you specified.
    Note:
    To construct the virtual table from your Command, the command must be executed once. If the command has parameters, you will be prompted to enter values for each one.
    By default, your command is called Command. You can change its alias by selecting it and pressing F2.

  • How to get the difference of two dates in years,months and days

    Hi friends,
    how to get the difference of two dates in years,months and days
    for ex 2 years 3 months 13 days
    select (sysdate-date_Start) from per_periods_of_service
    thanks

    Something like this...
    SQL> ed
    Wrote file afiedt.buf
      1  with t as (select to_date('17-nov-2006','dd-mon-yyyy') as c_start_date, to_date('21-jan-2008','dd-mon-yyyy') as c_end_date from dual union all
      2             select to_date('21-nov-2006','dd-mon-yyyy'), to_date('17-feb-2008','dd-mon-yyyy') from dual union all
      3             select to_date('21-jun-2006','dd-mon-yyyy'), to_date('17-jul-2008','dd-mon-yyyy') from dual
      4             )
      5  -- end of test data
      6  select c_start_date, c_end_date
      7        ,trunc(months_between(c_end_date, c_start_date) / 12) as yrs
      8        ,trunc(mod(months_between(c_end_date, c_start_date), 12)) as mnths
      9        ,trunc(c_end_date - add_months(c_start_date, trunc(months_between(c_end_date, c_start_date)))) as dys
    10* from t
    SQL> /
    C_START_D C_END_DAT        YRS      MNTHS        DYS
    17-NOV-06 21-JAN-08          1          2          4
    21-NOV-06 17-FEB-08          1          2         27
    21-JUN-06 17-JUL-08          2          0         26
    SQL>But, don't forget that different months have different numbers of days, and leap years can effect it too.

  • How to get the difference between two columns in a column group

    Hi All,
    My first time here and really new to programming. I would like to get the difference between 2 columns that are inside 
    a column group.
    Here is my sample table below: The Column Group is PeriodNumber and can only choose 2. like 1 and 2.. I would like to have a third row which will simply calculate the difference between the amounts in PeriodNumber 1 and 2.
                                PeriodNumber          
    Account                    1                            2     
    1) Cash                10,000                15,000
    2) Receivables      12,000                11,500
    3) Equipment          5,000                  5,500
    Total Assets          27,000                32,000

    Hi yabgestopa,
    From your description, you want to get the difference between two columns in a column group. After testing it in my environment, we can use custom code to achieve your requirement. For more details, you can refer to the following steps:
    Copy the custom code below and paste it to your report. (Right-click report>Report Properties>Code)
    Dim Shared Num1 As Integer
    Dim shared Num2 As Integer
    Public Function GetAmount(Amount as Integer, Type as String)
    If Type = "1" Then
    Num1=Amount
    Else
    Num2=Amount
    End If
    Return Amount
    End Function
    Public Function GetDif()
    Return Num1-Num2
    End function
    Right-click the second column to insert a third column with Outside Group-Right.
    Then use the expressions below in the matrix.
    =Code.GetAmount(Fields!Amount.Value,Fields!PeriodNumber.Value)
    =code.GetAmount(Sum(Fields!Amount.Value),Fields!PeriodNumber.Value)
    =Code.GetDif()
    The report looks like below.
    If you have any questions, please feel free to ask.
    Thanks,
    Katherine Xiong
    Katherine Xiong
    TechNet Community Support

  • Set TIMEOUT on OCCI sql query using ?

    Is there a way to set a timeout on a sql query using OCCI ?

    OCCI does not provide an API to set timeouts on SQL Queries.
    You can use the CREATE PROFILE command and assign resources at
    a user level. The restrictions may be applied to memory/resources which
    in turn would control the SQL execution time. Please check the
    CREATE PROFILE command.
    Rgds
    Amogh

  • Do we have a way to get the differences between xtext model before and after partial parse?

    Do we have a way to get the differences between xtext model before and after partial parse?
    As an example i have file contains 4 lines, xtext parsed this file and generated its model, then i made small modification in line number 3, so xtext partially parsed the file and generated another model.
    The question is could we get the nodes that has been deleted from the model?
    could we get the new nodes added to the model?
    could we get the differences between the two models?

    Workflow {
    bean = StandaloneSetup {
    scanClassPath = true
    platformUri = "${runtimeProject}/.."
    // The following two lines can be removed, if Xbase is not used.
    registerGeneratedEPackage = "org.eclipse.xtext.xbase.XbasePackage"
    registerGenModelFile = "platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel"
    component = ParseXextModel{
    //Load the xtext model and keep the reference of the inmem model
    component = DirectoryCleaner {
    directory = "${runtimeProject}/src-gen"
    component = DirectoryCleaner {
    directory = "${runtimeProject}/model/generated"
    component = DirectoryCleaner {
    directory = "${runtimeProject}.ui/src-gen"
    component = DirectoryCleaner {
    directory = "${runtimeProject}.tests/src-gen"
    component = Generator {
    pathRtProject = runtimeProject
    pathUiProject = "${runtimeProject}.ui"
    pathTestProject = "${runtimeProject}.tests"
    projectNameRt = projectName
    projectNameUi = "${projectName}.ui"
    encoding = encoding
    language = auto-inject {
    uri = grammarURI
    // Java API to access grammar elements (required by several other fragments)
    fragment = grammarAccess.GrammarAccessFragment auto-inject {}
    // provides a compare view
    fragment = compare.CompareFragment auto-inject {}
    component = ParseXextModel{
    //Load the xtext model again and keep the reference of the inmem model
    component = CompareModel {
    //Implement this using EMF Comapre to see the differnces between 2 models
    }

  • How to find sql query using sqlid

    Hi
    I am not aware of that sqlid .DBA is saying a particular sqlid is making problem .how to find the particular sql query using sql_id ?

    Are you aware of modplsql when i executed the query the result is like
    DECLARE
       rc__             NUMBER;
       simple_list__    OWA_UTIL.vc_arr;
       complex_list__   OWA_UTIL.vc_arr;
    BEGIN
       OWA.init_cgi_env (:n__, :nm__, :v__);
       HTP.htbuf_len := 84;
       NULL;
       NULL;
       simple_list__ (1) := 'sys.%';
       simple_list__ (2) := 'dbms\_%';
       simple_list__ (3) := 'utl\_%';
       simple_list__ (4) := 'owa\_%';
       simple_list__ (5) := 'owa.%';
       simple_list__ (6) := 'htp.%';
       simple_list__ (7) := 'htf.%';
       simple_list__ (8) := 'wpg_docload.%';
       IF ((owa_match.match_pattern ('Oly_browse.oly_pattern ',
                                     simple_list__,
                                     complex_list__,
                                     TRUE
       THEN
          rc__ := 2;
       ELSE
          NULL;
          NULL;
         oly_browse.oly_pattern (search_phrase      => :search_phrase,           --Oly_browse.oly_pattern is package name
                                btn                => :btn,
                                p_qual             => :p_qual,
                                p_bcat             => :p_bcat,
                                p_stdy             => :p_stdy,
                                p_bloc             => :p_bloc,
                                z                  => :z
          IF (WPG_DOCLOAD.is_file_download)
          THEN
             rc__ := 1;
             WPG_DOCLOAD.get_download_file (:doc_info);
             NULL;
             NULL;
             NULL;
             COMMIT;
          ELSE
             rc__ := 0;
             NULL;
             NULL;
             NULL;
             COMMIT;
             OWA.get_page (:data__, :ndata__);
          END IF;
       END IF;
       :rc__ := rc__;
    END; Edited by: vishnu prakash on Sep 8, 2010 10:16 PM

  • Getting the difference between 2 dates

    Hi,
    I am creating a Date object (using today;s day, month and year. hours and minutes come from a config file) and getting the difference between this date and the current date and time.
    My code is as follows:
    I am passing 07:30 into the method as the parameter aSstart_time.
    Calendar newCalendar = Calendar.getInstance(Locale.UK);
        SimpleDateFormat dtformat = new SimpleDateFormat("dd-MM-yy HH:mm");
        int lIYear = newCalendar.get(newCalendar.YEAR);
        int lIMonth = newCalendar.get(newCalendar.MONTH);
        int lIDay = newCalendar.get(newCalendar.DAY_OF_MONTH);
        String lSstartHrs = aSstart_time.substring(0,aSstart_time.indexOf(":"));
        //System.out.println(">>>>>>>>> THE HOURS IS: " + lSstartHrs);
        String lSstartMins = aSstart_time.substring(aSstart_time.indexOf(":")+1,aSstart_time.length());
        //System.out.println(">>>>>>>>> THE MINS IS: " + lSstartMins);
        java.util.Date ldStartTime = new java.util.Date(lIYear,lIMonth,lIDay, Integer.parseInt(lSstartHrs),Integer.parseInt(lSstartMins));
        System.out.println("Year: " + lIYear);
        System.out.println("Month: " + lIMonth);
        System.out.println("Day: " + lIDay);
        System.out.println("Hour: " + Integer.parseInt(lSstartHrs));
        System.out.println("Min: " + Integer.parseInt(lSstartMins));
        System.out.println("The number of milliseconds for current time is: " + newCalendar.getTime().getTime());
        System.out.println("The number of milliseconds for 07:30 is: " + ldStartTime.getTime());
        System.out.println("calendar time: " + dtformat.format(newCalendar.getTime()).toString());
        System.out.println("created time: " + dtformat.format(ldStartTime).toString());
        if(newCalendar.getTime().getTime() < ldStartTime.getTime()){
          System.out.println("The current time is less than the config time (07:30)");
        else{
          System.out.println("The time is greater than 07:30");
        }When I run this program at 10:06am I get the following output:
    Year: 2006
    Month: 1
    Day: 15
    Hour: 7
    Min: 30
    The number of milliseconds for current time is: 1139997962321
    The number of milliseconds for 07:30 is: 61098132600000
    calendar time: 15-02-06 10:06
    created time: 15-02-06 07:30
    The current time is less than the config time (07:30)
    The Date.gettime() method should measure the number of milliseconds after 01-01-1970 so the number of milliseconds for the current time (10:06am) should be greater than the number of milliseconds for 07:30. A you can see in the above output this is not the case.
    Anybody have any idea why this is happening. Am I using the .gettime() method for the correct purpose.
    Any ideas or suggestions would be greatly appreciated.
    Thanks

    It is beacause Calendar use fully defined year as parameter, so Calendar.set(year + 1900, month, date, hrs, min) is (almost) equivalent to new Date(year, month, date, hrs, min)Example:    int year = 85; // old way of specifying a year in a Date
        int month = 3;
        int date = 12;
        int hrs = 12;
        int min = 0;
        Calendar cal = Calendar.getInstance();
        cal.set(year + 1900, month, date, hrs, min);
        Date d = new Date(year, month, date, hrs, min);
        System.out.println(d);
        System.out.println(cal.getTime());You will obtain the same date (except seconds and miliseconds in this case, as they probably won't be zero with Calendar.getInstance(); )

  • How to get the difference of two dates?

    let's say i have a table named tblData and has 4 columns: data_RefNo, data_DateReported, data_TargetDate, data_Data
    tblData returns 2 rows.
    data_RefNo.............data_DateReported.............data_TargetDate........................data_Data
    10000................10-20-2004 10:55:44 AM........10-20-2004 10:57:44 AM........Slow Response Time
    10000................10-21-2004 10:55:44 AM........10-21-2004 11:55:44 AM........Bug Error
    i just wana ask how to get the difference of the date_DateReported and date_TargetDate.
    i tried this code but it didnot work
    public Vector get_con_pf()
      Vector vData = new Vector();
      String query  = "SELECT * FROM tblData WHERE data_RefNo= '"'10000'"'";
      try
        DBConnect db = new DBConnect();
        db.openCon();
        ResultSet rs = db.execute(query);
        while (rs.next())
          vData.addElement(DATEDIFF(mi, rs.getString("st_DateReported"), rs.getString("st_TargetFinishDate")));
        db.closeCon();     
      catch (Exception e)
        System.out.println("Error: " + e );
      return vData;   
    i want to return the difference of the data_DateReported and date_TargetDate, i did this
    vData.addElement(DATEDIFF(mi, rs.getString("st_DateReported"), rs.getString("st_TargetFinishDate")));but it didnot work.
    How do i get that? because i want to return a vector.
    the code must return the values:
    2 for the 1st rows because the difference is only 2 minutes, and
    60 for the 2nd row.

    ooops i tried this one:
    query = "SELECT *, DATEDIFF(mi, data_DateReported, data_TargetDate) AS diff FROM tblData WHERE data_RefNo = '10000'";and it works.
    hehehehe!!!!!!
    problem solved! :)

  • Trying to Get the "Difference" Between Two Tracks

    What I am trying to accomplish is this: I have an audio track of a voiceover with a music bed beneath it. I also have the bed music by itsself, without the voiceover. I want only the voice portion. Is there a way that I can "cancel out" the music portion or get the difference between the two tracks (just the voice portion)? It seems that there should be some means of doing this, but for the life of me I cannot figure out how to do it!
    Any advice?

    If it's exactly the same music track, then as long as you line it up sample-accurate and the levels co-incide, you can do a simple subtractive process. You need both files available, trimmed to length. Open them both in Edit View, and copy one of them to the clipboard. Open the other, and select Mix-paste, and use the 'invert' option. That will effectively subtract one from the other, with the difference being your vocal.
    Have to tell you though that the chances of getting this spot on are amazingly low... any errors at all leave you with bleed-through, about which you can do nothing.

  • Getting the Difference in JTables my algo is messed

    Im trying to get the difference of two JTables...in other words if Table B has the rowdata of Table A, then Table C should not have it...Table C should have all the data in Table A - the data in Table B
    heres my code:
    //in a subclass of JTable
    public Object[][] getDifferenceData(JTable table){
        DefaultTableModel thisModel = (DefaultTableModel)this.getModel();
        DefaultTableModel userModel = (DefaultTableModel)table.getModel();
        int differenceRows = thisModel.getRowCount() - userModel.getRowCount();
        Object[][] newData = new Object[differenceRows][2];
        Object symbol = new Object();
        Object description = new Object();
         for (int i=0; i<differenceRows; i++){
            for (int j=0; j<userModel.getRowCount()-1; j++){
                if ((symbol = thisModel.getValueAt(i,0)) != userModel.getValueAt(j,0)){
                    //symbol in portfolio model != symbol in user portfolio
                    //so new difference table model should have it
                    description = thisModel.getValueAt(i,1);
                    newData[0] = symbol;
    newData[i][1] = description;
    return newData;
    heres what im trying to do
    1) new Data[][] is set to size bigger table row count - smaller tables
    for all new row size
    2)compare table A data in the current row and first column to all the rows/first column of table B
    3) if the data is NOT the same, the copy that row data from Table A into a new 2D data vector to the appropriate row
    4) return the new data[][] for new jtable creation
    but what happens is that the difference table (C) contains the corrent number of rows...but it still contains the data found in table B, and the new table C is just table C with the right number of rows cut off
    my algo is severly messed :)
    any help would be appreciated..thanks

    hey klepto,
    your not using .equals() on the symbol Object, this means that all it is doing is seeing if they refer to the same instance of the object, not if the to instances have the same value.
    The other problem is that you presume that the difference of the two collections is based on their respective size. What if they contain totaly different values? Then the total size would be the sum of both collections.
    Lets presume that the symbol is a String. Then I would do the following:
    //in a subclass of JTable
    public Object[][] getDifferenceData(JTable table, DefaultTableModel thisModel, DefaultTableModel userModel){
        Object[][] newData = null;
        String symbolA = null;
        String symbolB = null;
        String description = null;
        SymbolData symbolData = null;
        Vector newList = new Vector();
        int nbrRowsA = thisModel.getRowCount();
        int nbrRowsB = userModel.getRowCount();
        for(int i = 0; i < nbrRowsA; i++) {
            symbolA = (String)thisModel.getValue(i, 0);
            for(int j = 0; j < userModel.getRowCount() - 1; j++) {
                symbolB = (string)userModel.getValue(i, 0);
                if(!symbolA.equals(symbolB)){
                    description = (String)thisModel.getValueAt(i,1);
                    newList.add(new SymbolData(symbol, description));
        if(newList.size() > 0) {
            int size = newList.size();
            newData = new String[size][2];
            for(int i = 0; i < size; i++) {
                symbolData  = (SymbolData)newList.get(i);
                newData[0] = symbolData.getSymbol();
    newData[i][1] = symbolData.getDescription();
    return newData;
    class SymbolData {
    String symbol;
    String description;
    MyDataClass(String symbol, String description) {
    this.symbol = symbol;
    this.description = description;
    String getSymbol() {
    return symbol;
    String getDescription() {
    return description;
    String[] getData() {
    String[] data = new String[2];
    data[0] = symbol;
    data[1] = description;
    return data;
    Hmm, that should do the job. Not the fastest code, I'm sure there
    could be some improvements with the array handling. But it should
    get you started.
    Also I have not attempted to compile the above so I suspect you
    will find problems (only on a good day do I get zero compile errors
    when I first write something, good days are rare :-) ).
    James.

Maybe you are looking for