Select from multiple tables using max

I have these 3 tables listed below and I want to write an sql that would give me
WORKER_ACCOUNT.Name along with his latest status (which can be derived from WORK_LOG.Status for max(WORK_LOG.Log_ID) )
I want NULL for missing status.
Any help appreciated
DROP TABLE WORKER_ACCOUNT;
CREATE TABLE WORKER_ACCOUNT
NAME VARCHAR2(255) NULL,
ID INTEGER NULL
INSERT INTO PANDORA_SVC.WORKER_ACCOUNT VALUES ('John Doe', 51);
INSERT INTO WORKER_ACCOUNT VALUES ('Jane Doe', 52);
DROP TABLE WORK_ASSIGNMENT;
CREATE TABLE WORK_ASSIGNMENT
WORKER_ID INTEGER NULL,
WORK_ID INTEGER NULL
INSERT INTO WORK_ASSIGNMENT VALUES (51, 101);
INSERT INTO WORK_ASSIGNMENT VALUES (52, 102);
DROP TABLE WORK_LOG;
CREATE TABLE WORK_LOG
WORK_ID INTEGER NULL,
LOG_ID INTEGER NULL,
STATUS VARCHAR2(255) NULL
INSERT INTO WORK_LOG VALUES (101, 1, 'INITIATED');
INSERT INTO WORK_LOG VALUES (101, 2, 'INVESTIGATING');
INSERT INTO WORK_LOG VALUES (101, 3, 'FILING REPORT');
COMMIT;
Edited by: 811677 on Feb 22, 2011 11:10 PM

try it please
with data as
(select wa.worker_id, wc.name, nvl(wl.status,'MISSING') status , nvl(wl.log_id,-1) LOG_ID
from work_log wl, work_assignment wa, worker_account wc
where wl.work_id(+)=wa.work_id
and wa.worker_id(+)=wc.id)
select worker_id, name, status
from data a
where
  log_id = (select max(b.log_id ) from data b
              where a.worker_id = b.worker_id
            group by b.worker_id)or
with data as
(select wa.worker_id, wc.name, nvl(wl.status,'MISSING') status , nvl(wl.log_id,-1) LOG_ID
from work_log wl, work_assignment wa, worker_account wc
where wl.work_id(+)=wa.work_id
and wa.worker_id(+)=wc.id)
select worker_id, name, status, log_id from
(select worker_id, name, status, log_id, max(log_id) over (partition by worker_id order by worker_id) max_log
from data )
where log_id = max_logEdited by: Mahir M. Quluzade on Feb 23, 2011 11:37 AM

Similar Messages

  • Selecting from multiple tables, into one internal table

    Hi,
    What is the best & most efficient method of selecting from multiple table (in my case 6,) into one internal table?
    Thanks,
    John
    Points will be rewarded and all responses will be highly appreciated.

    I have simple example :
    First one - Join 5 tables
    data : f1 type i,
              f2 type i,
              f3 type i.
    start-of-selection.
    get run time field f1.
    write the query 4 or 5 tables join.
    get run time field f2.
    f3 = f2 - f1 ( Total time).
    Second one - joins 3 table and use for all entries
    data : f1 type i,
              f2 type i,
              f3 type i.
    start-of-selection.
    get run time field f1.
    write the query 3 tables join and use for all entries
    get run time field f2.
    f3 = f2 - f1. ( Total time )
    Finally you can have time diffrence between the both sql statement.

  • Select from multiple tables without join statement

    Hey Gurus,
    I would like to make a select from a multiple tables to check if there is any reference to my data. I would like to do it with some elegancy, but I don't know how.
    Is in abap sql possible to do it only with the select statement?
    Or I was also think about a solution that I should fill some data structure with all of the tables which I want to select from and then just loop that data structure and do the select seperately from all of the tables. I just need to check if it founds some results, so no need to store it. If this solution would be fine what data structure should I use?
    Or can tell me what would be the best for this?
    My code for select from one table, which I want to make for multiple tables:
    SELECT SINGLE id_kniznice FROM zbr_t_autori INTO wa_id
           WHERE id_kniznice EQ ls_extract-zview-id_kniznice.
         IF sy-dbcnt > 0.
           MESSAGE i000(zbr_msgc_lib).
           ls_extract-flags-vim_mark = '*'.
           MODIFY extract FROM ls_extract.
    ENDIF.   
    Thank you for any posts.
    Regards,
    Robert

    And there we go again...
    Read this topic:
    For All Entries is NOT better than INNER JOIN in most cases
    And this one:
    inner join vs for all entries
    Also that one:
    Re: LOOP AT vs INNER JOIN
    JOINs are really better than for all entries in most cases. Problem is people tend to ignore basic things like using pks or indexes while making them.

  • Sample PHP Service selecting from multiple tables

    Hi all!
    I have the following challange:
    How do I properly set up my PHP-service to insert, select, update and delete values from multiple tables?
    So far, the standard templates generated by Flash Builder is based on a single table.
    Example: I have 2 tables: [person] and [school]
    [person] has [person_id, first_name, last_name, birthdate]
    [school] has [school_id, person_id, school_name, city]
    One [person] can have multiple [schools]
    How should I define the selectByID function in PHP to be able to have
    First name: [TextInput /]
    Last name: [TextInput /]
    Birthdate: [DateField /]
    Schools:
    [TabBar: School1, School2, School3 /]
    [ViewStack1]
    School name: [TextInput /]
    Location name: [TextInput /]
    [/ViewStack1]]
    [ViewStack2]
    School name: [TextInput /]
    Location name: [TextInput /]
    [/ViewStack2]]
    [ViewStack3]
    School name: [TextInput /]
    Location name: [TextInput /]
    [/ViewStack3]]
    And even more interesting: How do I update all these fields back to the database?

    First, the relationship between school and person is many-to-many NOT one-to-many -- you will need to add a junction table.
    From the form you have given I would handle insertions like this:
    loop through all the schools and see if the school already exist in the DB. If so, then store the school_id. If not, then create a new record and store the id. You should have an array collection of store_ids by the end of the loop
    Check whether the student exists w/in the DB. If so, then you might consider aborting the operation or you could opt to do an update. If the student doesn't exist, then create a new student record and store the new student_id (mysql::insert_id)
    Loop through the school_id array and add new student_id/school_id records into the junction table.
    Retrieving records is much simpler -- it's just a join on the tables i.e. "SELECT * FROM student INNER JOIN school_student ON student.student_id = school_student.student_id INNER JOIN schools ON school_student.school_id = school.school_id WHERE student.first_name = 'John' AND student.last_name = 'Doe' (assuming there aren't more than one John Does of course!).
    - e

  • Select from Multiple tables

    Hi,
    I am doing select from multiple tabels (2) in one SQL query.
    How to get the result as it says.. Column name is incorrect ?
    thanks,
    -raj

    treat the resultset as noraml. You get it in sequence as you have specified the column names. You use rs.getXXX(index) instead of columnname

  • Urgent. . .About select * from multiple tables

    When I am doing the 'Select * from tables' in JSP,
    sql = dbconn.prepareStatement("SELECT * FROM protein WHERE protein_id ='"+p_i+"'");
    It works, because I only select one table.
    Then, I change to select from two tables,
    sql = dbconn.prepareStatement("SELECT * FROM protein, fuses WHERE protein_id ='"+p_i+"'");
    It also works properly?
    However, When I do like:
    sql = dbconn.prepareStatement("SELECT * FROM protein, protein_taxa WHERE protein_id ='"+p_i+"'");
    It doesn?t work.
    So, I think it might be the problem that there is a common column 'protein_id' in both tables, although protein_taxa.protein_id is a foreign key of protein.protein_id. Therefore, I can select two table protein, fuses which have different columns, but no way to select the table they have same name column.
    However, it?s essential for me to select all the data from the database. Any way I could achieve it? Thanks a lot!!

    SELECT *
    FROM protein, protein_taxa
    WHERE protein.protein_id = 'a_protein_id'
    and protein.protein_id = protein_taxa.protein_id It would also be good to indicate which fields you want on the select clause. This will liberate the server to return two fields with the same name.
    SELECT protein.protein_id, protein.name, protein_taxa.taxa /* ??? */
    FROM protein, protein_taxa
    WHERE protein.protein_id = 'a_protein_id'
    and protein.protein_id = protein_taxa.protein_id

  • Select from multiple tables through dblink

    I am seeking help. Can I select multiple tables through a dblink from a remote database? I tried, it seems it always return ORA-00933 error. code like this:
    select A.ID, B.CODE, C.TYPE_DESC
    from TABLE_ONE A@db_link , TABLE_TWO B@db_link, TABLE_THREE C@db_link;
    where A.ID = B.ID
    and B.CODE = C.CODE
    Thanks in advance.

    Just as an FYI, from a performance standpoint, it is frequently the case (though certainly not guaranteed) that you'll get better performance creating a view on the remote database that does the join of all three tables and to use that view in your query, particularly if you're also joining in local tables. Optimizing SQL statements across database links tends to be particularly hard, a view often helps force Oracle to join the remote tables on the remote database which is generally what you'd want. Of course, this is not a guarantee, and you can always get explicit with hints to force joins to happen on one or the other system, but this is frequently the easiest starting point.
    Justin

  • Read Infopackage selection from a table using ABAP

    Hello Experts,
    I have a flat file consisting of 3 columns which I want to use as selection fields for the Infopackage. Now, is it possible to load this flat file to an ODS or a master data table and then write some ABAP  in the Infopackage to read the values of the columns and populate the selection fields.
    This is what I want: The columns of the flat file are  - Company Code, Doc number, Fiscal Year
    Now, I loaded this file into a tables (around 2 million records) and then use ABAP to populate the entire file into the selection tab of the Infopackage.
    What would be the best approach for this?
    Thanks in advance
    Vivek

    Hi,
    It's possible in theory. Just one thing, too many selections in an InfoPackage may not work (I remember about 1,000 or 10,000, not very sure).
    I'd like suggest loading a range rather than so many selections. For example, say you have below documents:
    1000
    1001
    1005
    1010
    Then just load from 1000 to 1010, and create a start routine in your update rule/transformation. There you can do this:
    1. select records from the table where you store flat file, using the same selection (1000 to 1010)
    2. For every records in DATA_PACKAGE, using READ TABLE statement to check whether that record exist in the table. If not exist then simply delete it from DATA_PACKAGE
    I think that would have much better performance. Let us know if you have further questions.
    Regards,
    Frank

  • Is selecting from a view more efficient than selecting from multiple tables

    Hi heres the problem
    Lets say i created a view from 2 tables (person and info). both have a ID column
    create view table_view (age,name,status,id) as
    select a.age, a.name, b.status, b.id
    from person a, info.b
    where a.id=b.idif i want to select a given range of values from these 2 tables which of the following queries would be more effective.
    select a.age, a.name, b.status, b.id
    from person a, info.b
    where a.id=b.id
    and a.id <1000
    select age, name, status, id
    from table_view
    where  id <1000

    Bear in mind that this concept of views storing the SQL text is something relative to Oracle databases and not necessarily other RDBMS products. For example, Ingres databases create "views" as tables of data on the database and therefore there is a difference between selecting from the view and selecting from the base tables.
    Oracle also has "materialized views" which differ from normal "views" because they are actually created, effectively, as tables of data and will not use the indexes of the base tables.
    In Oracle, you cannot create indexes against "views" but you can create indexes against "materialized views".

  • Extracting data from multiple tables using DB connect

    Hi,
       I am having different tables which are  having the same structure in oracle database but  there names are different.Now i have only one datasource at BI side.This datasource shld extract data from the  tables dynamically.How can i do it using DB Connect .
    Thnxs

    ahh I see - problem as you said then is if you then take on a new location!
    I would then put into the source system a table identifier and create a view across all the tables
    Then dbconnect from the view and use the selection parameter of table parameter if you wanted one infopackage per "location"
    If you do need to have a new table in the source then just expand the view and create a new ipak
    hence NO bw changes required that need a dev-q-p transport - just the ipak in prod and it;s the source systems problem to add the extra table to the view

  • Writing select from multiple tables, listed in another table

    Hi there.
    I need to write a select which is a little complex for me. Here is conditions,
    All tables have the same column names, but i want to use staff_no.
    All table names written in MASTER_TB table (15 table name).
    is there a shortcut to write a sql like i am joining them?
    (NO select * from staff t1, emp t2 ,company t3 .....etc....)
    THANKS

    you will have to write each tables just the same as writing a simple query. this is the part where you will have to write each tables in your FROM clause and any other column in the SELECT statement plus those condition expressions in your WHERE clause as to what you might be needing to arrive in the results that you needed.

  • Getting Result from multiple table using code table.

    I am having hard time getting data from different table not directly connected.
    

    The data model is not proper. Why should you store the game details in separate tables?
    IMO its just matter of putting them in same table with additional field gamename to indicate the game. That would have been much easier to query and retrieve results
    Anyways in the current way what you can do is this
    SELECT p.ID,p.Name,c.CategoryName AS [WinnerIn]
    FROM GameParticipants p
    INNER JOIN (SELECT ParticipantID, Value AS ParticipantName,'CGW Table' AS TableName
    FROM CGWTable
    UNION ALL
    SELECT ParticipantID, Value AS ParticipantName,'FW Table' AS TableName
    FROM FWTable
    SELECT ParticipantID, Value AS ParticipantName,'WC Winner' AS TableName
    FROM WCWinner
    ... all other winner tables
    )v
    ON v.ParticipantID = p.ID
    AND v.ParticipantName = p.Name
    INNER JOIN Category c
    ON c.TableName = v.TableName
    If you want you can also add a filter like
    WHERE p.Name = @Name
    to filter for particular player like Henry in your example
    Please Mark This As Answer if it helps to solve the issue Visakh ---------------------------- http://visakhm.blogspot.com/ https://www.facebook.com/VmBlogs

  • How to select from multiple tables which reside on different data stores ?

    Suppose I have two data stores in one TimesTen instance:
    1) Datastore A:
    table1
    2) Datastore B:
    table2
    I want to make a query like this:
    select ... from table1, table2 where table1.colA = table2.colB
    Can I ? If not, is there a workaround ?
    BTW, because of business, we have to use two or more different datastores, so we can not put table1/table2 in the same datastore.
    Thanks very much.

    You can query multiple TimesTen databases, but your original question was about joining tables from two databases, which is not supported.
    Using Cache Connect to Oracle to query an Oracle database is not distributed. It's still one single Oracle database you are querying. You cannot join a table in the TimesTen database with a table in the Oracle database, this is not allowed.
    If you are willing to share your business requiremens, we can take a look and see what solution might work for you. Would you like to discuss this offline?
    Susan

  • Count rows from multiple tables using SQL only

    Hi, I know this has probably been answered before, but I couldn't find the answer anywhere. Please help.
    I'd like count(*) [rows] for all tables in database using SQL only - no PL/SQL
    The result should be something like:
    Table RowCount
    DBA_TABLES 1000
    DBA_USERS 50
    etc.
    Thanks!

    offcource write this script:
    create or replace procedure count_tables (ip_schema VARCHAR2)
    is
    lv_owner VARCHAR2(100);
    lv_table_name VARCHAR2(100);
    lv_sql_statement VARCHAR2(2000);
    lv_count_table NUMBER;
    CURSOR c1 IS
    SELECT owner, table_name
    FROM all_tables
    WHERE owner = ip_schema
    ORDER BY table_name;
    begin
    dbms_output.put_line ('+--------------------------------------------------------------------+');
    dbms_output.put_line ('¦ | | ¦');
    dbms_output.put_line ('¦ Schema Name | Table Name | Number of Rows ¦');
    dbms_output.put_line ('¦ | | ¦');
    dbms_output.put_line ('¦------------------------------------------------------------------¦');
    OPEN c1;
    LOOP
    FETCH c1 INTO lv_owner , lv_table_name;
    EXIT WHEN c1%NOTFOUND;
    lv_sql_statement := 'SELECT count(*) FROM ' || lv_owner || '.' || lv_table_name;
    EXECUTE IMMEDIATE lv_sql_statement INTO lv_count_table;
    IF lv_count_table > 0 THEN
    dbms_output.put_line ('| '||rpad(lv_owner, 14, ' ')||'| '|| rpad(lv_table_name, 32, ' ')||'| '|| rpad(lv_count_table, 16, ' ')||' |');
    -- dbms_output.put_line ('|---------------|---------------------------------|------------------|');
    END IF;
    END LOOP;
    CLOSE c1;
    dbms_output.put_line ('+--------------------------------------------------------------------+');
    exception
    WHEN OTHERS THEN
    dbms_output.put_line ('owner: '||lv_owner||' - table: '||lv_table_name||' - '||sqlerrm);
    end count_tables;
    set serveroutput on size 1000000
    exec count_tables
    drop procedure count_tables;

  • Deleting from multiple table using hsql

    I am having the following code which runs fine with mysql. But the sql statement fails for hsql (hipersonic database). Can you please give
    some pointershow the statement should be for hsql
    ================CODE====================
    import org.springframework.jdbc.core.JdbcTemplate
    def statement = "delete a, ac, ace from Alarm a, AlarmCause ac, AlarmCauseElement ace where a.timeStamp <= ? and a.id=ac.alarm_id and
    ac.id=ace.cause_id"
    JdbcTemplate.
    int rows = jdbcTemplate.update(statement, 1000000000) // I just added 1000000000 as sample date
    ===============ERROR=====================
    PreparedStatementCallback; bad SQL grammar [delete a, ac, ace from Alarm a, AlarmCause ac, AlarmCauseElement ace where a.timeStamp <= ? and
    a.id=ac.alarm_id and ac.id=ace.cause_id]; nested exception is java.sql.SQLException: Unexpected token A, requires FROM in statement [delete a,
    ac, ace from Alarm a, AlarmCause ac, AlarmCauseElement ace where a.timeStamp <= ? and a.id=ac.alarm_id and ac.id=ace.cause_id]

    2. Explain what "does not work" means exactly.Reading between the lines the OP is trying to remove rows from three different tables. Perhaps the following from the original post really does work in MySQL?
    delete a, ac, ace from Alarm a, AlarmCause ac, AlarmCauseElement ace where a.timeStamp <= ? and a.id=ac.alarm_id and ac.id=ace.cause_idHowever I doubt you can do join deletes in HSQL. So he will probably need to split it into multiple deletes based upon subqueries. Something like:
    delete from AlarmCauseElement where cause_id in ( select ac.id from Alarm a left join AlarmCause ac on ac.alarm_id = a.id where a.timestamp <= ?);
    delete from AlarmCause where alarm_id in (select id from Alarm where timestamp <= ?);
    delete from Alarm where timestamp <= ?;(None of the above is tested).
    Edited by: dcminter on 28-Oct-2009 10:00

Maybe you are looking for

  • Error 2 when downloading itunes

    Tried downloading itunes 11 for the first time on my computer. No luck keep getting error 2. Tried extracting the files and no luck still. Is there any other ways I can get it on my computer? Thanks in advance!

  • Make Indesign cross references link to the top/above the destination paragraph?

    Cross references in InDesign create interactive hyperlinks that link to a position in the resulting PDF where the targetted  destination paragraph is right at the very top of the page. Often, it's too far up - sometimes the paragraph text is actually

  • Err:Internal Job Queue full for synchronous processing of print requests

    Hi, We are getting a lot of errors in system log with the error : Internal Job Queue full for synchronous processing of print requests. User :SAPSYS MNO:FBU. When we check the document in syslog it states it can be solved by reducing the print load o

  • Can I restore deleted history or keep history from being deleted?

    My question pretty much summed it up. I would like to restore deleted history or at least see what was deleted, or keep history from being deleted altogether.

  • Group Search- How?

    Hello Gurus, Our UME is tied to Active Directory with read-only option. I am presently trying to clean up groups which involves identifying groups stored in Portal Database (not in AD) and then possibly deleting them. If I search for groups, the resu