工作中需要用到对多列分组并排序后的组内数据。这时候就需要用ROW_NUMBER() OVER()啦。
语法格式:row_number() over(partition by 分组列 order by 排序列 desc)
注意:over()里头的分组以及排序的执行晚于sql中 where 、group by、 order by 的执行。
SELECT l.purchase_order,l.po_line_number,h.CREATE_TIME,
row_number() over(partition by l.purchase_order, l.po_line_number ORDER BY h.CREATE_TIME desc) rn
FROM header h,Line l where h.id= l.id
扩展:RANK() OVER()、DENSE_RANK() OVER()
RANK()
1 2 3 |
|
DENSE_RANK()
1 2 3 |
|