数据如下图 ,id1即user_id 字段有多组数据,我们只需要每个 user_id 的最新一条数据
方式:ROW_NUMBER() OVER
具体是 使用 – ROW_NUMBER() OVER ( PARTITION BY tlt.user_id order by tlt.handle_time desc) rowNum 来区分,从而获取最新数据
具体实现
SELECT * FROM (
SELECT tlt.longitude, tlt.latitude,u.*,ROW_NUMBER() OVER ( PARTITION BY tlt.user_id order by tlt.handle_time desc) rowNum
from t_location tlt LEFT JOIN t_user u on tlt.user_id = u.id
where u.org_id in (64 ,67) ) as temp
where TEMP.rowNum = 1
亲测可用,不用感觉很麻烦,但是这个好像解决这个问题较为有效的方式,其实将各部分替换一下就好了。partition by 后面就是根据什么分组,order by后面是根据什么来排序,可以增加多个,直接and后面加条件就行了。注意别忘了rowNum,这个是表的名字,注意最后的where TEMP.rowNum=1别忘了。
引自https://blog.youkuaiyun.com/phn555/article/details/76033187?locationNum=10&fps=1