oracle rownumber over partition by,oracle 排序 row_number() over(partition by 排序字段)

业务描述:按t.truckId,t.riskCode 分组,每个分组里有分数,取分组中分数最大的那条记录。

如:A1 B1   5  6

A1  B1   5  3

A1  B2   2  5

A1  B2   2  1

已经按 A,B分组了 但是 我需要第一条和第三条数据,就可以用这个row_number() over(partition by  排序字段)降序

然后取 rowseq = 1 的数据就可以拿到了

SELECT

gg.sumScore     AS sumScore,

gg.numberRisk   AS numberRisk,

gg.happenTime   AS happenTime

FROM (

SELECT

g.sumScore      AS sumScore,

g.numberRisk    AS numberRisk,

g.happenTime    AS happenTime ,

(row_number() over(partition by g.truckId  order by g.sumScore desc) ) as rowseq --分数最大的排在前面

FROM(

SELECT

sum(score)                    as sumScore  ,--分数

count(t.riskCode)          as numberRisk ,

max(t.happenTime)      as  happenTime,

t.truckId                      as  truckId

FROM

(

SELECT

t1.truck_id  truckId,

to_char(t1.happen_time,'yyyy-mm-dd hh24:mi:ss')   AS  happenTime,

t2.score         As  score,

t2.code          As  riskCode

FROM  b_risk_event t1

INNER JOIN d_dictionary_info t2 ON t1.risk_type = t2.code

WHERE t1.happen_time >  SYSDATE-30/(24*60)

AND t1.del_flag='0'

AND t2.father_type in('1','2','3','5','8','17','18','0')

order by t1.happen_time DESC

) t

GROUP BY t.truckId,t.riskCode

ORDER  BY sumScore DESC,happenTime DESC

)g

) gg

WHERE   gg.rowseq =1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值