2013-04-09 189 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(日期))

相关问题