最近遇到一个需求,要将数据分组,然后取每组最新的数据,刚开始各种join操作,都很繁杂,对于大数据量来说,实为不妥,计算总是超过了300多秒。于是干脆直接用了开窗
select t.field1,field2,field3,field4
from(
select field1,field2,field3,field4,rank() over(partition by field1,field2 order by create_time desc) as ranks
from TABLE
where date='20200515'
) t
where ranks=1 -- 取最新
子查询对其进行分组降序排序,然后外查询直接筛选出第一行数据即可
对于Top-K的话,可以将where字句改一改