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

来源:互联网 发布:微商作图软件 编辑:程序博客网 时间:2024/05/21 07:48
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的结果行,则是最终结果;

如下图排序:


最终结果:


阅读全文
0 0
原创粉丝点击