oracle通过表中2个字段分组查询取数量最大的所有记录,有条件的去重

select a.line_name, a.driver_id, a.driver_name, a.dept_no
  from (select s.line_name,
               s.driver_id,
               s.driver_name,
               s.dept_no,
               row_number() over(partition by s.driver_id order by count(s.driver_id) desc) rn
          from operate.OS_BUS_LINEOPERATE_TIMES s
         where s.income_date between to_date('2017-10-21', 'YYYY-MM-DD') and
               to_date('2017-11-20', 'YYYY-MM-DD')
         group by s.line_name, s.driver_id, s.driver_name, s.dept_no) a
 where a.rn = 1

业务需求是:

查询表中驾驶员及线路信息,且取驾驶员在某一线路上最大记录的数据行作为最终结果(相当于用驾驶员driver_id去重,即有条件的去重);

解决方法:

用过函数row_number() over(partition by  过滤字段 order by 排序字段) ,查询出个驾驶员的信息且用rownum排序。

我们最终只要取rownum = 1的结果行,则是最终结果;

如下图排序:


最终结果:


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值