您的位置:首页 > 数据库 > Oracle

oracle按某个字段分组然后从每组取出最大的一条纪录

2016-07-28 10:06 573 查看
需求:查询各个设备存在未消缺的缺陷,取缺陷等级最高的,作为这个设备当前的缺陷等级:
[align=left]数据源:[/align]
[b]  [/b]

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;


如图:



[align=left] [/align]
[align=left] [/align]
[align=left]要求: 需求获取红色部分的内容,,那么对应的SQL语句为[/align]

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;


结果如图:



[align=left] [/align]
[align=left]其中: row_number() over( partition by 分组字段 order by 排序字段 desc[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: