SQL Oracle - max function -


i need query, need code name address recent date per code (date1 < date6 in example)

tab1

   code address ====================     cod1    addr1     cod2    addr2     cod3    addr3     cod4    addr4 

tab2

    code    date     name ===========================     cod1    date1    name1     cod1    date2    name1     cod1    date3    name2     cod2    date3    name3     cod3    date5    name4     cod3    date6    name5     cod4    date3    name6 

so write

select tab1.code, tab1.address, tab2.name, max(tab2.date) tab1, tab2 tab1.code=tab2.code group tab1.code, tab1.address, tab2.name order tab2.name 

but not want, same code multiple times different dates, guess join or nested select necessary, being little ignorant i'm asking here help

you can use either analytics or aggregate functions.

analytics:

select code, address, name, date   (select tab1.code, tab1.address, tab2.name, tab2.date,                row_number() on (partition tab1.code                                    order tab2.date desc) rn           tab1            join tab2 on tab1.code = tab2.code)  rn = 1 

aggregates:

select tab1.code, tab1.address,         max(tab2.name) keep (dense_rank first order tab2.date desc) name,        max(tab2.date) keep (dense_rank first order tab2.date desc) date   tab1    join tab2 on tab1.code = tab2.code  group tab1.code, tab1.address 

this select 1 row each row in table 1. if there 2 rows in table 2 same date same code, 1 row chosen arbitrarily.


Comments

Popular posts from this blog

php - mySql Join with 4 tables -

css - Text drops down with smaller window -

c# - DetailsView in ASP.Net - How to add another column on the side/add a control in each row? -