最近在写一个SQL脚本,主要是将来源表每个月的增量数据全量导入到目标表中,并实现每个月底定时调度。但是来源表中对于一个用户由于更新时间的不同会存在多条记录,当然我们只需要取最新的一条记录使用,就要用到row_number()这个函数,下面介绍一下它的简单用法:
语法格式:row_number() over(partition by 分组列 order by 排序列 desc/asc)
它会根据分组列首先进行分组,然后在组内进行升序降序排列
select *
from(select *,
row_number()over(partition by user_id order by update_time desc) rank
from table) t1
where t1.rank = '1';
按照用户id根据更新时间进行组内降序排序,取rank值为1的记录就是用户最新记录
很重要的一点,在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where 、group by、 order by 的执行。