Oracle【rank】数据库多条记录分组&每组取一条

背景

有功能需要多表联合查询,有部分结果看起来出现两次或更多次

 

排查

发现是Left join右表存在多条记录

 

需求

右表中多条记录需要先分组,取分组中第一条,才是需要的连接数据

 

方案

使用Oracle自带函数rank()

--product_code 分组字段名
--model 排序字段名,识别你需要的数据
--r=1 拿每组中的第一条
--and product_code = 'KZ070Q' 可以增加更多的范围条件
select *
  from (select rank() over(partition by product_code order by model) r, a.*
          from MBOM a)
 where r = 1
   and product_code = 'KZ070Q'

 

完成

以上,解决问题,满足需求。

 

(适用)

多表联合查询,发现数据重复出现,可以考虑联合表是否出现多条记录,是否分组获取第一条,就能满足需求,那么,上面的方案,就能解决这个重复数据问题。

 

posted @ 2020-03-31 17:00  章力  阅读(1201)  评论(0编辑  收藏  举报