使用不同的行过滤器

时间:2012-10-04 01:24:06

标签: sql oracle

这是主表查询

Select * 
from AC_TAB 
where AC_ID = 7 ; 

AC_PK AC_ID TYPE  STATUS   INS_DATE               VALID
102   7     0     0        3/21/2012 3:35:08 PM   0 
103   7     1     0        3/21/2012 3:35:08 PM 
104   7     2     1        3/21/2012 3:35:08 PM 

我使用ac_id使用txn表加入此表。因为这里有3行ac_id 7,我的txn表返回3次。如何限制这一点。因为我想只返回一个而不管类型

我的Txn查询

Select txn_id, amount 
from txn_hdr , ac_tab 
where txn_ac_id = ac_id ;

txn_id  amount   
 1       200 
 1       200 
 3       100 
 3       100 

2 个答案:

答案 0 :(得分:0)

实际上并不清楚您需要什么,但听起来您只想从ac_idAC_TAB返回一条记录。如果是这样,那么有几种方法可以做到这一点。

使用子查询:

select *
from
(
  select max(INS_DATE) INS_DATE, AC_ID
  from ac_tab
  group by AC_ID
) a
inner join txn_hdr t
  on a.ac_id = t.ac_id;

或CTE使用row_number()

;with cte as
(
  select a.ins_date, a.ac_id, t.amount, row_number() 
            over(partition by a.ac_id order by a.ins_date desc) rn
  from ac_tab a
  inner join txn_hdr t
    on a.ac_id = t.ac_id
)
select *
from cte 
where rn = 1;

或者在子查询中使用row_number()

select *
from 
(
  select a.ins_date, a.ac_id, t.amount, row_number() 
            over(partition by a.ac_id order by a.ins_date desc) rn
  from ac_tab a
  inner join txn_hdr t
    on a.ac_id = t.ac_id
) x
where rn = 1

答案 1 :(得分:0)

你可以这样做:

选择不同的txn_id,金额 来自txn_hdr,ac_tab 其中txn_ac_id = ac_id;