oracle按某個字段分組然后從每組取出最大的一條紀錄


需求:查詢各個設備存在未消缺的缺陷,取缺陷等級最高的,作為這個設備當前的缺陷等級:
數據源:
  
select t.device_id, t.defect_level
  from sp_pd_defect t
 where t.deal_result <> 2
   and t.device_id in ('03060000083602',
                       '03060000085322',
                       '03060000085762',
                       '03060000087242',
                       '03060003731354')
 group by t.device_id, t.defect_level
 order by t.device_id, t.defect_level asc;

如圖:

 

 
 
要求: 需求獲取紅色部分的內容,,那么對應的SQL語句為
 
select device_id 設備ID, defect_level 缺陷等級 --缺陷等級,1緊急,2重大,3一般,4其他
  from (select t.device_id,
               t.defect_level,
               row_number() over(partition by t.device_id order by t.defect_level asc) rn
          from sp_pd_defect t
         where t.deal_result <> 2
           and t.device_id in ('03060000083602',
                               '03060000085322',
                               '03060000085762',
                               '03060000087242',
                               '03060003731354'))
 where rn = 1;

 結果如圖:

 

 
其中: row_number() over(  partition  by 分組字段  order  by 排序字段  desc


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM