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的结果行,则是最终结果;
如下图排序:
最终结果:
本文介绍了一种使用SQL的row_number()函数实现特定条件下去重的方法,通过案例演示如何选取驾驶员在各线路上的最大记录数作为最终结果。
1279

被折叠的 条评论
为什么被折叠?



