天天看點

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的結果行,則是最終結果;

如下圖排序:

oracle通過表中2個字段分組查詢取數量最大的所有記錄,有條件的去重

最終結果:

oracle通過表中2個字段分組查詢取數量最大的所有記錄,有條件的去重