如何在Oracle中选择不同的记录?

阿卡什·拉索(Akash Rathor)

我想在某些情况下选择不同的行,但是当我在select语句中添加id列时,它将返回所有行???

下面的查询工作正常

select distinct dst_bnk_acnt_id
,dst_cust_id
,org_cust_id
,dst_pos_id
,pmt_typ_cd 
from tb_cm_t_pmt_coll
where org_pos_id = 8 OR dst_pos_id = 8 OR dst_bnk_acnt_id = 1 ;

但是,当我想使用id(desc)的顺序选择最新记录时,它将返回所有行!

SELECT  distinct id
,dst_bnk_acnt_id
,dst_cust_id
,org_cust_id
,dst_pos_id
,pmt_typ_cd  
FROM  tb_cm_t_pmt_coll
WHERE org_pos_id = 8 OR dst_pos_id = 8 OR dst_bnk_acnt_id = 1 
ORDER BY id DESC;

我知道“ id”列是主键,其所有值都是唯一的,因此所有行都变得唯一。

我只想使用这些[dst_bnk_acnt_id,dst_cust_id,org_cust_id,dst_pos_id,pmt_typ_cd]选择一个不同的行,但我也想使用id降序对它们进行排序。

请帮忙。

a_horse_with_no_name

我将使用窗口函数:

select id,
       dst_bnk_acnt_id,
       dst_cust_id, 
       org_cust_id,
       dst_pos_id,
       pmt_typ_cd
FROM (
  SELECT id,
         dst_bnk_acnt_id,
         dst_cust_id, 
         org_cust_id,
         dst_pos_id,
         pmt_typ_cd, 
         row_number() over (partition by dst_bnk_acnt_id,dst_cust_id,org_cust_id,dst_pos_id,pmt_typ_cd 
                            order by id desc) as rn  
  FROM  tb_cm_t_pmt_coll
  WHERE org_pos_id = 8 
     OR dst_pos_id = 8 
     OR dst_bnk_acnt_id = 1 
)  
WHERE rn = 1
ORDER BY id;

order by id desc窗口中的功能给出了最高的行id的行号1,挑选最新id的独立列的每个组合。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章