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的结果行,则是最终结果;
如下图排序:
最终结果: