平时遇到最多的sum(),max()等等,使用group by聚合函数即可轻松解决,但是有时候我们的需求:按类别分组,按时间排序,然后获取每个分组中最新的一条。这种需求。
SQL1>
select t1.* from log_update_cycle t1,
(
select b.cycle_id,max(update_date) update_date from log_update_cycle b group by b.cycle_id
)
t2
where t1.update_date=t2.update_date and t1.cycle_id=t2.cycle_id;
SQL2>
select * from
(
select t.*, row_number() over (partition by cycle_id order by update_date desc) rn ,count(*) over (partition by cycle_id) nums from log_update_cycle t
)
where rn=1
---推荐使用SQL2,row_number()是比rownum更强大的伪列。
如果需要更深入的了解row_number(),参见
文章