2013-04-09 63 views
0

我在Oracle SQL中有點新手,所以請耐心等待。從第二張表中獲得最後一條記錄

我有兩個表:

Contaiers: 
=========== 
eq_nbr, 
size, 
date 

Gate Transactions (gate_tran): 
================== 
eq_nbr, 
date, 
trucker_id 

有每個集裝箱多門交易,所以我需要一個特定的eq_nbr的最後一個記錄。

我在想的東西,如:

select ct.eq_nbr, ct.size, ct.date, 
    (select trucker_id last over (partition by gt.eq_nbr) from gate_tran gt where 
    gt.eq_nbr = ct.eq_nbr) 
from 
    containers ct 

但它不工作。有任何想法嗎?

回答

1
select * 
    from (select ct.eq_nbr, ct.size, gt.date, gt.trucker_id, 
       row_number() over (partition by ct.eq_nbr order by gt.date desc) rn 
      from containers ct 
       inner join gate_tran gt on gt.eq_nbr = ct.eq_nbr) 
where rn = 1; 

將獲得每個eq_nbr的最新日期。例如http://sqlfiddle.com/#!4/5f52f/1

0
select 
    eq_nbr, ct.size, ct.date, 
    max(gt.date) as last_date, 
    min(trucker_id) keep (dense_rank first order by gt.date desc) as last_trucker_id 
from 
    containers ct 
    join gate_trans gt using(eq_nbr) 
group by eq_nbr, ct.size, ct.date 

fiddle
感謝DazzaL製備方案:-)

+0

非常感謝大家。 – 2013-04-09 18:48:31

0

嗨,你總是可以利用最新的日期added.You能做到這一點是這樣的:

選擇CT .eq_nbr,ct.size,ct.date from gate_tran gt內部連接容器ct其中gt.eq_nbr = ct.eq_nbr和date =(從gate_tran選擇max(日期))

相關問題